Ich habe schon immer gewusst, dass der Standard für die Dereferenzierung von null
UB ist. AllerdingsDereferenz null ist nicht immer UB?
(Link 1) sagt
p = 0; * p; ist nicht von Natur aus ein Fehler.
und bietet einen Link zu
(Link 2) sagt
* p kein Fehler ist, wenn p null ist, wenn der L-Wert auf einen L-Wert umgewandelt wird
(ich glaube, es ist ein Tippfehler und sollte wahrscheinlich lesen lvalue wird in einen rvalue umgewandelt)
Verbindung 1 sagt auch
char * p = 0; char * q = & * (p)
ist „nicht undefiniert“, die ich nur als lesen konnte gut definierte oder zumindest Implementierung definiert
eine Sprache Anwalt Kann ein liefern maßgebliche Erklärung dessen, was vor sich geht?
Ich bin kein Anwalt der Sprache, aber mein Lesen der Links ist, dass die Dereferenzierung eines Null-Zeigers in sich nicht UB, nur mit dem Wert ist. Und ja, es scheint ein Tippfehler zu sein, sollte lvalue zu rvalue sein, so wie es in link1 zitiert wird. Ich denke, dass es im statischen Element-Fall sinnvoll ist, da nur der statische Typ von 'operator *' benötigt wird, und link1 ist, soweit ich sehen kann, damit konsistent. – drRobertz
Wenn Implementierungen es segfault machen, ist das wirklich UB? Ich kann mir keine vorstellen, die das nicht tun. – Donnie