最佳答案
考虑以下代码:
#include <iostream>
struct foo
{
// (a):
void bar() { std::cout << "gman was here" << std::endl; }
// (b):
void baz() { x = 5; }
int x;
};
int main()
{
foo* f = 0;
f->bar(); // (a)
f->baz(); // (b)
}
我们预计 (b)
会崩溃,因为空指针没有对应的成员 x
。实际上,(a)
不会崩溃,因为从来不使用 this
指针。
因为 (b)
解引用了 this
指针((*this).x = 5;
) ,而且 this
是 null,所以程序进入了未定义行为,因为解引用 null 总是被认为是未定义行为。
如果两个函数(和 x
)都是静态的,那么 (a)
会导致未定义行为吗?