NULL und 0
-
mit der zeile
if (object != nullptr) {...}meint er glaub ich schon woanders. z.b. in anderen Methoden
ich schreib auch immer so
if (object) {...}
-
Student83 schrieb:
Ich habe auch eine Frage zum nullptr. Macht es einen Unterschied ob ich
Object object = new Object(); if (object != nullptr) {...}oder
if (object) {...}schreibe? Ich benutze die erste Variante würde mir aber die zusätzliche Schreibarbeit auch sparen wenn beides vom Compiler gleich behandelt wird.
Ohne Gewähr: Da dem Standardisierungskomitee sehr daran gelegen ist, die Bedeutung von vorhandemem Code nicht zu verändern, wird bei
if (object)das Objektobjectin einen bool umgewandelt, sodass letztlich nur geprüft wird, ob object auf 0 zeigt. Das ist semantisch nicht dasselbe wie eine Prüfung auf nullptr.
-
Michael E. schrieb:
Ohne Gewähr: Da dem Standardisierungskomitee sehr daran gelegen ist, die Bedeutung von vorhandemem Code nicht zu verändern, wird bei
if (object)das Objektobjectin einen bool umgewandelt, sodass letztlich nur geprüft wird, ob object auf 0 zeigt. Das ist semantisch nicht dasselbe wie eine Prüfung auf nullptr.Ohne Gewähr: Ich dachte, primitive Typen haben keine
operator boolund werden direkt auf0überprüft. Ein!= nullptrwäre dann semantisch genauso unsinnig wie ein!= falsebzw. ein== true. Letztendlich ist es in meinem Verständnis das selbe ...
-
gewehr schrieb:
Ohne Gewähr: Ich dachte, primitive Typen haben keine
operator boolint main() { static_cast<bool>(42); }und werden direkt auf
0überprüft.Ich hab aber nirgends eine 0 geschrieben.
Ein
!= nullptrwäre dann semantisch genauso unsinnig wie ein!= falsebzw. ein== true.Ergibt alles Sinn.
Letztendlich ist es in meinem Verständnis das selbe ...
nullptr tut mehr als zu prüfen, ob der Zeiger auf 0 zeigt.
-
Student83 schrieb:
Ich habe auch eine Frage zum nullptr. Macht es einen Unterschied ob ich
Object object = new Object();Das ist kein C++. Nehmen wir an, 'object' sei ein roher Zeiger...
Student83 schrieb:
if (object != nullptr) {...}oder
if (object) {...}schreibe?
Das macht keinen Unterschied.
-
Michael E. schrieb:
Ohne Gewähr: Da dem Standardisierungskomitee sehr daran gelegen ist, die Bedeutung von vorhandemem Code nicht zu verändern, wird bei
if (object)das Objektobjectin einen bool umgewandelt, sodass letztlich nur geprüft wird, ob object auf 0 zeigt. Das ist semantisch nicht dasselbe wie eine Prüfung auf nullptr.So habe ich mir das auch vorgestellt.
krümelkacker schrieb:
Das ist kein C++. Nehmen wir an, 'object' sei ein roher Zeiger...
Deine Annahme ist richtig, war schon spät und ich hab das * vergessen.
krümelkacker schrieb:
Das macht keinen Unterschied.
Alles klar, hätte ich nicht gedacht.
-
krümelkacker schrieb:
Student83 schrieb:
Ich habe auch eine Frage zum nullptr. Macht es einen Unterschied ob ich
Object object = new Object();Das ist kein C++.
class Object { public: Object(); Object(Object *parent); };
-
wxSkip schrieb:
krümelkacker schrieb:
Student83 schrieb:
Ich habe auch eine Frage zum nullptr. Macht es einen Unterschied ob ich
Object object = new Object();Das ist kein C++.
class Object { public: Object(); Object(Object *parent); };
Seine Aussage, das es kein C++ sei, ist vollkommen korrekt. Das kann man vielleicht in C# oder Java so schreiben.
In C++ muss man dafür ein Zeiger haben und die () sind bei leerer Parameterliste auch nicht korrekt.
Object *obj = new Object;
-
-
... und die Klammern bei new Object() sind auch korrekt.
-
Ethon_ schrieb:
#define nullptr 0Löst das Problem in 99% der Fälle.
Verwende
NULL, wenn dir das reicht. Das Nullzeigerliteralnullptrwird eingeführt, gerade weilNULLeinige Unzulänglichkeiten mit sich bringt (z.B. dass es einintist).
-
Gibt es eigentlich irgendwas, was gegen NULL spricht, außer dass es ein int ist, wenn man den neuen Standard nicht hat?
0 und #define nullptr 0 sind auch int.
NULL läßt sich auch viel einfacher zu nullptr ändern als 0, wenn man mal den neuen Std hat.
-
FutterBeidieTische schrieb:
Gibt es eigentlich irgendwas, was gegen NULL spricht, außer dass es ein int ist, wenn man den neuen Standard nicht hat?
1. Die Verwendung von NULL gibt keine zusätzliche Typsicherheit, d.h. man kann z.B. nach wie vor einer Funktion versehentlich NULL übergeben, wenn an der Stelle eigentlich ein int o.ä. gefordert war. In Zeiten von IDEs mit Calltips passiert sowas allerdings ohnehin kaum mehr.
2. Ist länger als 0.Dass man NULL jedoch mit einer einzigen Ersetzaktion im gesamten Projekt zu nullptr ändern kann (und notfalls auch wieder zurück) ist allerdings ein absolutes K.O.-Argument, das für NULL spricht.