Sollte man in C++ 'NULL' oder '0' für Pointer-initialisierungen nehmen?
-
Die Antwort schrieb:
Die richtige Antwort lautet 0 (int) für C++, NULL (void* 0) für C und NULL in C++, wenn man mit C-Bibliotheken arbeitet.
Wieso braucht ihr da 5 Seiten, um nichts zu sagen?
Ich sehe, du hast mein Buch gelesen! Wenigstens einer in diesem Forum, der Ahnung hat! Von dir kann auch camper noch was lernen!
-
Bjarne Stroustrup schrieb:
Die Antwort schrieb:
Die richtige Antwort lautet 0 (int) für C++, NULL (void* 0) für C und NULL in C++, wenn man mit C-Bibliotheken arbeitet.
Wieso braucht ihr da 5 Seiten, um nichts zu sagen?
Ich sehe, du hast mein Buch gelesen! Wenigstens einer in diesem Forum, der Ahnung hat! Von dir kann auch camper noch was lernen!
Nur komisch, dass er eplizit zu 0 rät. (TC++PL, 4. Auflage, Seite 96, 5.1.1)
-
Hat er doch gesagt, 0 für C++!
-
keine Magicnumbers dafür im Code verteilen, sonder Konstanten oder Defines, dann kann mans auch schnell ändern, wenn 0x0000 doch besser ist als 0x0
-
0 ist keine Magic Number, sondern eine Rahmenvereinbarung!
-
das 0 wiel jede Zahl im Code eine Magicnumber ist, ist ja wohl klar. Irgend einer kommt irgendwann mal auf dei idee sowas zu machen
pos = 0; if (...) pos = 0; ... pos = 0;
Ach pos sollte da doch besser immer 7 sein, kein Problem Suchen & Ersetzen, ups alle null pointer geändert.
-
Dafür gibt es z.B. die ungarische Notation. 0 ist bei Zeigern weiterhin keine Magic Number.
-
jetzt hör mal zu, alter schrieb:
Dafür gibt es z.B. die ungarische Notation. 0
Du bist lustig
-
Wenns dann mal nen richtigen nullptr in C++ gibt, dann wirst du merken wie klever es war überall 0 hinzuschreiben, dann kannst du bei jeder Zahl und bei jedem Pointer schauen, ob du es ersetzen willst. Aber arbeitest du überhaupt an großen Projekten die auch in ein paar Jahren noch weiterentwickelt werden?
-
Große Projekte werden eh nicht migriert. Zumindest bei mir in der Firma ist das so. Da wird teilweise auch noch mit irgendwelchem pre-C++98 Müll rumgebastelt.
-
das wichtigste ist schrieb:
das 0 wiel jede Zahl im Code eine Magicnumber ist, ist ja wohl klar. Irgend einer kommt irgendwann mal auf dei idee sowas zu machen
pos = 0; if (...) pos = 0; ... pos = 0;
Ach pos sollte da doch besser immer 7 sein, kein Problem Suchen & Ersetzen, ups alle null pointer geändert.
Es ist nicht jede Zahl im Code eine Magic Number. Gerade 0 und 1 kann man oft einfach hinschreiben und trotzdem versteht noch jeder was gemeint ist. Magic numbers sind, wenn du anwendungsspezifische Werte ausschreibst (wieviel Lebenspunkte hat ein Axtkämpfer?), die man vielleicht sogar noch tunen müsste. Sowas versteht dann kein Mensch.
0 für Pointer ist vollkommen klar, da zerbricht man sich nicht den Kopf darüber.
-
Hi, ich war schon länger nicht mehr hier im Thread weil ich dachte die Sache wäre bereits geklärt.
Aber danke noch mal an alle, ich habe mich jetzt auch für 0 entschieden. Das scheint in C++ einfach Gang-Gebe zu sein nicht mehr mit NULL zu arbeiten.Gruß
-
Nur weil es gang und gäbe zu sein scheint, würde ich das allerdings nicht selber verwenden. Nimm doch, was du persönlich besser findest.
NULL
hat wie gesagt den Vorteil, dass man sofort sieht, dass es sich um Pointer handelt. Und glaub mir, diesen Punkt sollte man nicht unterschätzen...
-
- ?? ... und was ist mit
nullptr
... ?? -Grüssli
-
Dravere schrieb:
- ?? ... und was ist mit
nullptr
... ?? -Grüssli
Werden wir dann mit dem C++0x Standard nutzen. Im jetzigen Standard steht allerdings immer noch 0 für NULL, deshalb nimmt man eben das.
-
Er meint wohl eher die Struktur, die er selber gebastelt hat
-
ghorst schrieb:
sicher heißt, dass man möglichst viele der nullpointer-schweinerein nicht machen kann. bspw ihn nicht dereferenzieren kann, die zuweisung int = nullptr illegal ist, usw.
erklärungen findet man hier, da ist auch die variante von meyers mit drin:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdfWieso erst im nächsten Standard, wieso nicht jetzt schon? Wurde auf Seite 2 vorgeschlagen, ist meiner Meinung nach die beste Lösung und trotzdem kommen alle immer wieder im Thread mit dem NULL oder 0. Kann doch nicht sein, was gefällt euch denn an dieser Lösung nicht? ^^
Edit:
@Nexus,
Das war nicht ich! Das auch zum zweiten oder dritten Mal :pGrüssli
-
Im jetzigen Standard gibt es noch kein nullptr. Wieso sollte man mit einer selbst gefriemelten Klasse nullptr imitieren wollen? Mit diesem Gehacke setzt man sich über die Sprache hinweg, das führt langfristig immer zu Problemen.
Es ist ganz einfach:
C++03: 0
C++0x: nullptrEin C++0x mit nullptr ist Frickelwerk!
-
Ein C++03 mit nullptr ist Frickelwerk!
-
Optimizer schrieb:
das wichtigste ist schrieb:
das 0 wiel jede Zahl im Code eine Magicnumber ist, ist ja wohl klar. Irgend einer kommt irgendwann mal auf dei idee sowas zu machen
pos = 0; if (...) pos = 0; ... pos = 0;
Ach pos sollte da doch besser immer 7 sein, kein Problem Suchen & Ersetzen, ups alle null pointer geändert.
Es ist nicht jede Zahl im Code eine Magic Number. Gerade 0 und 1 kann man oft einfach hinschreiben und trotzdem versteht noch jeder was gemeint ist. Magic numbers sind, wenn du anwendungsspezifische Werte ausschreibst (wieviel Lebenspunkte hat ein Axtkämpfer?), die man vielleicht sogar noch tunen müsste. Sowas versteht dann kein Mensch.
0 für Pointer ist vollkommen klar, da zerbricht man sich nicht den Kopf darüber.
Na dann viel Spaß mit euren 100000 Nullen im Code bei denen man nur aus dem Kontext weiß, ob Pointer oder Zahl.