NULL und 0
-
nullptr hab ich lange erwartet und nutze ihn jetzt auch nur noch, trotz fehlender abwärtskompatiblität...
sieht einfach verdammt cool aus
-
Wird also NULL vom Präprozessor behandelt? Ich habe nämlich bis jetzt immer NULL verwendet. Sollte dann nämlich wohl auf 0 oder den neuen Standard umsteigen.
-
Hab ihn: http://www.c-plusplus.net/forum/282374?highlight=null
Der neuste Stand nach 0x ist eh nullptr mit Typsicherheit und so.

-
Skym0sh0 schrieb:
nullptr hab ich lange erwartet und nutze ihn jetzt auch nur noch, trotz fehlender abwärtskompatiblität...
sieht einfach verdammt cool aus
#define nullptr 0Löst das Problem in 99% der Fälle.
-
Eisflamme schrieb:
Hab ihn: http://www.c-plusplus.net/forum/282374?highlight=null
Super, danke dir. Wobei ich besagten Thread irgendwie inhaltsamer in Erinnerung hatte
.
-
Ethon_ schrieb:
#define nullptr 0Löst das Problem in 99% der Fälle.
Ich dachte,
nullptrsei nur für diese 1% gedacht. Ihn ständig zu schreiben ist umständlich und hässlich, ich bleib lieber bei meiner schlichten 0.Und wenn schon, dann nimmt man das
nullptr-Template von Meyers, kein define.
-
SeppJ schrieb:
Eisflamme schrieb:
Hab ihn: http://www.c-plusplus.net/forum/282374?highlight=null
Super, danke dir. Wobei ich besagten Thread irgendwie inhaltsamer in Erinnerung hatte
.Hm, ja, ich auch. Hätte zumindest gedacht, dass da noch ein Verweis auf nen anderen Thread ist. Na was soll's, zumindest einige Infos findet man da.

-
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.
-
Ein normales new gibt nie 0 zurück, es wirft eine Exception. Aber ja, in diesem Fall ist es gleichwertig.
-
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).