如果我不實際訪問解除引用的「對象」,被取消引用空指針仍然不確定?解除引用空指針會成爲未定義的行爲?
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
這必須是一個確切的重複。我知道我們已經討論過這個問題。 –