標準では、null ポインターを逆参照すると、未定義の動作が発生することが示されています。しかし、「ヌルポインタ」とは何ですか? 次のコードでは、「ヌル ポインター」と呼んでいます。
struct X
{
static X* get() { return reinterpret_cast<X*>(1); }
void f() { }
};
int main()
{
X* x = 0;
(*x).f(); // the null pointer? (1)
x = X::get();
(*x).f(); // the null pointer? (2)
x = reinterpret_cast<X*>( X::get() - X::get() );
(*x).f(); // the null pointer? (3)
(*(X*)0).f(); // I think that this the only null pointer here (4)
}
私の考えでは、null ポインターの逆参照は最後のケースでのみ行われます。私は正しいですか?C++ 標準によると、コンパイル時の null ポインターと実行時の違いはありますか?