Tag: 标准合规性

什么时候调用null实例的成员函数会导致未定义的行为?

考虑下面的代码: #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,所以程序进入未定义的行为,因为dereferencing的null总是被认为是未定义的行为。 (a)是否会导致未定义的行为? […]