Sollte man in C++ 'NULL' oder '0' für Pointer-initialisierungen nehmen?
-
Meine Skepsis gegenüber C++0x ist wahrscheinlich auch darauf zurückzuführen, dass ich nur hobbymässig programmiere und weder riesige Projekte noch so komplizierte und lange Bezeichner habe, dass ein
typedef
ohneauto
unübersichtlich wird. Ich kann mir gut vorstellen, dass die neue Syntax gerade professionellen Anwendern sehr helfen kann, möglicherweise werde ich das später auch so sehenAber wie gesagt, momentan komme ich eigentlich gut mit der jetzigen Syntax zurecht, und es fehlen mir vielleicht die Anwendungsmöglichkeiten von C++0x (wobei ich einige Dinge auch sehr praktisch finde).
-
Widersetz dich nicht der Sprachsyntax, sondern werde eins mit ihr
Komm auf die bös.. ähh gute Seite der Sprache Luke.
Ansonsten denke ich auch, dass mit C++0x vor allem die forgeschrittenen Programmierer an die Reihe kommen. Und nicht direkt eine "vereinfachung" stattfindet. Die Syntax wird wahrscheinlich noch abschrekender, wenn man es nicht kennt.
Nach dem Vortrag von Stroustrup soll aber allgemein auch noch mehr Ausdruck in die Sprache kommen und das finde ich extrem postitiv, dass man sich dann sehr direkt ausdrucken kann.
-
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!