C++ 为什么我可以对尚未实例化的类调用函数?

C++ 为什么我可以对尚未实例化的类调用函数?,c++,C++,有人能解释一下为什么下面的代码能够调用SayHello函数并打印“Hello”吗 构造函数和析构函数从未被调用,因为没有实际创建的对象,那么为什么我可以调用SayHello函数 class A { public: A() { std::cout<<"In Constructor"<<std::endl; }; ~A() { std::cout<<"In Destructor"<<

有人能解释一下为什么下面的代码能够调用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;
}
A类
{
公众:
()
{


std::cout这是未定义的行为。它之所以正常工作是因为
SayHello
不访问任何成员数据。不要这样做。

这是未定义的行为。它之所以正常工作是因为
SayHello
不访问任何成员数据。不要这样做。

这是未定义的行为。它之所以正常工作是因为
SayHello
不访问任何成员数据。请不要这样做。

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

是的,我知道不这样做,我只想知道为什么这样做happens@HarryBoy:因为未定义的行为是未定义的。任何事情都可能发生;任何事情都包括函数w当你说这是一种未定义的行为时,你能引用这一知识的来源吗?@Guiroux看看我标记为的问题的副本,它有必要的参考。谢谢你的精确性是的,我知道不这样做,我只是想知道为什么happens@HarryBoy:因为未定义的行为viour是未定义的。任何事情都可能发生;任何事情都包括函数,如果调用正确,它会正常工作。当你说这是一个未定义的行为时,你能引用这一知识的来源吗?@Guiroux看看我标记为的问题的副本,它有必要的参考。谢谢你的精确性是的,我不知道d哦,我只是想知道为什么happens@HarryBoy:因为未定义的行为是未定义的。任何事情都可能发生;任何事情都包括函数在正确调用时的工作方式。当你说它是未定义的行为时,你能引用一下这些知识的来源吗?@Guiroux看看我标记为它的副本的问题,哈这是必要的参考资料。谢谢你的精确性是的,我知道不能这样做,我只是想知道为什么happens@HarryBoy:因为未定义的行为是未定义的。任何事情都可能发生;任何事情都包括函数在正确调用时的工作状态。当您说它是未定义的行为时,您能引用一下这些知识的来源吗?@Guiroux看一看我标记为的问题的副本,它有必要的参考。谢谢你的精确性。我肯定这是以前问过的。我肯定这是以前问过的。我肯定这是以前问过的。我肯定这是以前问过的。我肯定这是以前问过的。