Lo standard dice che il dereferenziamento del puntatore nullo porta a un comportamento non definito. Ma cos'è "il puntatore nullo"? Nel codice seguente, quello che noi chiamiamo "il puntatore nullo":Quale di questi creerà un puntatore nullo?
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)
}
Il mio pensiero è che dereferenziazione del puntatore nullo avviene solo in quest'ultimo caso. Ho ragione? C'è differenza tra i point null di compilazione e il runtime secondo lo standard C++?
Questo non è un compito a casa. Lo standard C++ non dice molto sul dereferenziamento dei puntatori nulli. Voglio solo sapere. –
La prima parte della mia risposta parla del dereferencing dei puntatori nulli: http://stackoverflow.com/questions/2474018/when-does-invoking-a-member-function-on-a-null-instance-result-in- undefined-behav (adoro questa domanda) – GManNickG