为什么我可以在尚未实例化的类上调用函数?

时间:2015-03-05 12:45:20

标签: c++

有人可以解释为什么以下代码能够调用SayHello函数并打印出“Hello”。

构造函数和析构函数永远不会被调用,因为实际上没有创建对象,那么为什么我可以调用SayHello函数?

class A
{
public:
    A()
    {
        std::cout<<"In Constructor"<<std::endl;
    };
    ~A()
    {
        std::cout<<"In Destructor"<<std::endl;
    };

    void SayHello()
    {
        std::cout<<"Hello"<<std::endl;
    }
};

int _tmain(int argc, _TCHAR* argv[])
{       
    A* a = nullptr;
    a->SayHello();

    return 0;
}

1 个答案:

答案 0 :(得分:3)

这是未定义的行为。它恰好起作用,因为SayHello无法访问任何成员数据。不要这样做。