如果我不实际访问解除引用的“对象”,被取消引用空指针仍然不确定?解除引用空指针会成为未定义的行为?
int* p = 0;
int& r = *p; // undefined?
int* q = &*p; // undefined?
一个稍微更实际的例子:我可以解引用空指针来区分重载吗?
void foo(Bar&);
void foo(Baz&);
foo(*(Bar*)0); // undefined?
好的,参考例根据标准绝对未定义的行为:
空引用不能在良好定义的程序存在的,因为只有这样,才能创建这样的参考将它结合到通过取消引用一个空指针,这导致未定义的行为获得的“对象”。
不幸的是,强调部分是模糊的。难道是结合部分导致未定义的行为,或者是解引用部分是否足够?
[这个问题包含你想要的信息。](http://stackoverflow.com/questions/2474018/when-does-invoking-a-member-function-on-a-null-instance-result-in- undefined-behav) – GManNickG
这必须是一个确切的重复。我知道我们已经讨论过这个问题。 –