Der Standard besagt, dass die Dereferenzierung des Nullzeigers zu undefiniertem Verhalten führt. Aber was ist der Nullzeiger? Im folgenden Code, wie wir es nennen „der Null-Zeiger“:Welcher von diesen erstellt einen Nullzeiger?
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)
}
Mein Gedanke ist, dass anstelle der Null-Zeiger-Dereferenzierung nur im letzten Fall nimmt. Habe ich recht? Gibt es einen Unterschied zwischen NULL-Zeigern zur Kompilierungszeit und Laufzeit gemäß C++ Standard?
Das ist keine Hausaufgabe. Der C++ Standard sagt nicht viel über das Dereferenzieren der Nullzeiger aus. Ich will nur wissen. –
Der erste Teil meiner Antwort hier spricht über Dereferenzierung von Null-Zeigern: http://StackOverflow.com/Questions/2474018/When-does-invoking-a-member-Function-on-Anull-Instance-Ergebnis-in- undefined-behav (ich liebe diese Frage.) – GManNickG