In diesem Code wird eine Referenz deklariert und auf einen Wert initialisiert, der durch Dereferenzierung eines Nullzeigers erhalten wird:
int &nullReference = *(int*)0;
Obwohl es aufgrund des Compilerverhaltens gültig erscheinen mag, ist es wichtig zu verstehen, dass Referenzen davon abweichen Zeiger.
Gemäß dem C-Standard (8.3.2/1):
"Eine Referenz muss initialisiert werden, um auf ein gültiges Objekt oder eine gültige Funktion zu verweisen ... insbesondere auf eine Nullreferenz kann in einem wohldefinierten Programm nicht existieren.“
Dies unterstreicht, dass eine Nullreferenz, die sich auf kein gültiges Objekt bezieht, kein wohldefiniertes Konzept in C ist .
Darüber hinaus besagt der Standard (1.9/4), dass „die Auswirkung der Dereferenzierung des Nullzeigers“ undefiniert ist. In diesem Fall, in dem wir eine Referenz mit einem Nullzeiger initialisiert haben, würde dies bedeuten, dass ein Nullzeiger selbst dereferenziert wird, was ein explizit undefiniertes Verhalten darstellt.
Daher ist der Code zwar möglicherweise ohne Warnungen kompiliert, aber nicht gültig C-Code und sollte vermieden werden. Nullverweise sind kein gültiges Konzept in der Sprache und jeder Versuch, einen solchen zu erstellen, führt zu undefiniertem Verhalten.
Das obige ist der detaillierte Inhalt vonKann eine C-Referenz Null sein?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!