Ich habe immer gewusst, dass die Standardmandate Dereferenzierung null
UB ist. Jedoch,
(Link 1) sagt
p = 0; * p; ist nicht von Natur aus ein Fehler.
und bietet einen Link zu
(Link 2) sagt
* p ist kein Fehler, wenn p null ist, es sei denn, der lvalue wird in einen lvalue
konvertiert
(Ich glaube, es ist ein Tippfehler und sollte wahrscheinlich lvalue in einen rvalue umgewandelt werden)
Link 1 sagt auch
char * p = 0; char * q = & amp; * (p)
ist "nicht undefiniert", was ich nur als gut definiert oder mindestens implementierungsdefiniert
lesen konnteKann ein Sprachanwalt eine verbindliche Erklärung dafür liefern?
Ich habe das Thema der Indirektion durch Nullzeiger in diese Antwort *p
&*p
entspricht p
, es sei denn p
ist ungültig. (Dies funktioniert auch für Zeiger hinter dem Ende eines Arrays, was für das allgemeine Idiom &arr[n]
notwendig ist).
Ich fing auch an, ein Papier für leere lvalues zu entwerfen (das ist WIP und die Rebase gegen N4640 isn ' t noch nicht fertig), also besteht die Chance, dass wir später mehr davon sehen.
Tags und Links c++ undefined-behavior language-lawyer