最佳答案
考虑以下代码:
#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)会导致未定义行为吗?