Die dritte Zeile sollte einen Fehler verursachen. Es ist nicht in VS2015, denn wenn ein Fehler entweder im Compiler oder im Standard, je nachdem, welcher Standard angewendet wird. Andere Compiler geben Fehlermeldungen über diese Zeile aus.
Bevor C++ 11, jeder integraler Konstante Ausdruck, der auf 0 auswertet wird als Nullzeiger Konstante behandelt, so dass die erste Zeile entspricht const int* p1 = NULL;
, It nicht p1 Punkt, um x.
Seit C++ 14 ist dies nicht mehr der Fall. Grob gesagt sind nur Literal Null und nullptr
gültige Nullzeigerkonstanten.
Dazwischen, dh in C++ 11, erlaubt der Standard tatsächlich, dass konstante Ausdrücke, die auf Null ausgewertet werden, als Nullzeiger-Konstanten behandelt werden. Dies wird als Fehler im Standard angesehen. Es wurde in C++ 14 behoben. Einige Compiler (gcc, clang) entscheiden sich, den Fehler sofort zu beheben und einen Fehler selbst im C++ 11-Modus zu melden. VS2015 nicht.
Die vierte Zeile war in keiner Version von C++ gültig, da der Typ r
eine Referenz und keine Ganzzahl ist.
'cosn int * p1 = x;' sollte nicht einmal kompilieren. Welchen Compiler benutzen Sie? – Rakete1111
Ihr erster Versuch mit dem 'p1' ist auch nicht legal. Beide Zeigerinitialisierungen sind falsch. –
VS 2015 mit/W4,/sdl und/WX on. Es kompiliert nicht, wenn x nicht konstant ist, sondern kompiliert mit const. – lousybyte