gpt4 book ai didi

c++ - 为什么我通过C++中的空指针调用成员函数时程序不会崩溃?

转载 作者:IT老高 更新时间:2023-10-28 22:16:37 26 4
gpt4 key购买 nike

#include "iostream"
using namespace std;
class A
{
public:
void mprint()
{
cout<<"\n TESTING NULL POINTER";
}
};

int main()
{
A *a = NULL;
a->mprint();
return 0;
}

我得到的输出是“TESTING NULL POINTER”。谁能解释为什么这个程序正在打印输出而不是崩溃。我在 Dev C++ 和 aCC 编译器上检查它都给出了相同的结果。

最佳答案

您没有使用 A 的任何成员变量 - 该函数完全独立于 A 实例,因此生成的代码恰好不包含任何取消引用的内容0. 这仍然是未定义的行为 - 它可能恰好适用于某些编译器。未定义的行为意味着“任何事情都可能发生”——包括程序恰好按程序员的预期工作。

如果你例如将 mprint 设为虚拟,您可能会遇到崩溃 - 或者如果编译器认为它并不真的需要 vtable,您可能无法获得崩溃。

如果你给 A 添加一个成员变量并打印出来,你会崩溃。

关于c++ - 为什么我通过C++中的空指针调用成员函数时程序不会崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5431420/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com