Sollte man in C++ 'NULL' oder '0' für Pointer-initialisierungen nehmen?
-
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.
-
Es ist ja auch nur im Kontext relevant.
-
Dravere schrieb:
@Nexus,
Das war nicht ich! Das auch zum zweiten oder dritten Mal :pTut mir leid für die Unterstellung, ich habe dich irgendwie damit assoziiert, wahrscheinlich weil du als starker Befürworter aufgetreten bist...
Chefentwickler schrieb:
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.
Zu welchen Problemen denn?
Der Punkt ist, dass man bei
NULL
gerade weiss, dass ein Pointer vorliegt, bei0
allerdings nicht. Das kann das Lesen unter Umständen stark erleichtern. Das wurde in diesem Thread nun hoffentlich genügend oft erwähnt.
Der andere Vorteil vonNULL
besteht (wie auch schon erwähnt wurde) darin, dass man bei C++0x nur sämtliche Vorkommen vonNULL
durchnullptr
ersetzen muss.Aber wie auch immer, schlussendlich ist das sowieso jedem selber überlassen...
Allerdings seh ich nicht genau ein, was gegenNULL
spricht (bei dernullptr
-Version, die nicht von Dravere stammt (:p), bin ich mir jetzt nicht sicher, ob sie uneingeschränkt einsetzbar ist).
-
Chefentwickler schrieb:
Mit diesem Gehacke setzt man sich über die Sprache hinweg, das führt langfristig immer zu Problemen.
Das hat nichts mit Gehacke zu tun und setzt sich nicht über die Sprache hinweg. Es nutzt die Sprache voll aus, auf hoher Ebene und gibt einem sogar Fehlersicherheit.
Zudem ist dann die Umstellung von C++03 Code auf C++0x Code kein Problem, was den nullptr betrifft. Man muss ja nicht mal was ersetzen lassen!
Ihr verleitet mich noch zu der gefährlichen Aussage: "Ihr habt doch keine Ahnung!"
Grüssli
-
Nexus schrieb:
Der Punkt ist, dass man bei
NULL
gerade weiss, dass ein Pointer vorliegtman glaubt es zu wissen. tatsaechlich liegt aber ein int vor, was gerade bei ueberladung _sehr_ relevant ist. NULL ist nicht besser als 0, es ersetzt ein paar probleme durch ein paar andere. nicht mehr, nicht weniger.
-
Ihr inkompetenten Schwachköpfe, wenn ihr in meinem Team arbeiten würdet, täte ich euch alle samt rauswerfen!!