Sind "(char *)0" und "NULL" gleich?
-
Ich habe nie gesagt, dass ich NULL mag.
NULL ist in C++ eine Nullpointer-Konstante.
Ist das im Standard so definiert?
Wenn ja, dann erscheint mir die template-Definition am sinnvollsten. Weil man es dann nicht fälschlicherweise als int einsetzen kann.
-
Das sinnvollste wär vielleicht, wenn es ein null Keyword wie in Ada, Java oder Eiffel (dort Void) gäbe. gcc hat das sogar IIRC, wenn man will, in Form des Schlüsselwortes __null, plus ein #define NULL __null.
-
Ist das im Standard so definiert?
Yep. Die genaue Repräsentation von NULL ist laut Standard "implementation defined". Wichtig ist nur, dass es sich um eine Nullzeiger-Konstante handelt. Also ein Wert der im Zeigerkontext zum Nullzeiger wird. Und zwar zu einem passenden Nullzeiger.
Wenn ja, dann erscheint mir die template-Definition am sinnvollsten
Nein die ist totaler Käse, da sie eben *nicht* Standardkonform ist.
Ein Standard-C++ Programm ruft in deinem Beispiel Foo(int) auf. Die Template-Null-Variante würde aber Foo(char*) aufrufen. Das ist zwar eine schöne Variante um maximale Verwirrung zu stiften, aber darum geht es beim Programmieren in der Regel nicht primär.
-
@Bashar:
Das fände ich auch sinnvoll.Wobei man diese Funktionalität auch mit template-member-functions erreichen kann. Nur der VC++ mag die wohl nicht.
Mein Code war aber wahrscheinlich auch nicht ganz korrekt, ich erinner mich nur noch dunkel daran.Wichtig ist nur, dass es sich um eine Nullzeiger-Konstante handelt.
Warum ist eine Nullzeiger-Konstante kein perfect match zu char*, sondern zu int?
Zur template-Definition:
Nein die ist totaler Käse, da sie eben *nicht* Standardkonform ist.
Im Standard steht doch "implementation defined".
Reicht es da nicht, dass NULL sich wie eine Nullzeigerkonstante verhält, muss es wirklich eine sein?[ Dieser Beitrag wurde am 03.07.2003 um 21:14 Uhr von cd9000 editiert. ]
-
Original erstellt von davie:
ich mag NULL nicht. und wir leben nicht in CFür diese beiden Sätze gilt übrigens: Zusammenhang == NULL.
In C besteht ebenfalls kein Bedarf für NULL und es kann überall durch 0 (oder '\0' oder 0ull oder 0x00 oder so) ersetzt werden. Es gilt nur, dass NULL in C als Zeiger vereinbart sein darf, aber nicht muss.
-
ok, dann hab ich falsch gedacht.
-
Warum ist eine Nullzeiger-Konstante kein perfect match zu char*, sondern zu int?
Sorry, aber durch das Fettmachen von Zeiger wird eine Nullzeiger-Konstante nicht automatisch mehr zum Zeiger. Eine Nullzeiger-Konstante ist nun mal *kein* Zeiger und deshalb kann char* kein perfect match sein. Eine Nullzeiger-Konstant ist laut Standard: "an integral constnat expression rvalue of integer type that evaluates to zero".
Im Standard steht doch "implementation defined".
Es ist "implementation defined" wie NULL repräsentiert wird. Es ist aber *garantiert*, dass NULL eine Nullzeiger-Konstante (und damit *kein* Zeiger), also ein integraler Typ der zu 0 ausgewertet wird, ist. Es kann also z.B. 0 sein (int) oder 0L (long) oder was auch immer. Solange die oben zitierte Bedingung erfüllt ist.
Reicht es da nicht, dass NULL sich wie eine Nullzeigerkonstante verhält, muss es wirklich eine sein?
a) Deine Template-Version verhält sich nicht wie eine Nullzeiger-Konstante sondern wie die der Nullzeiger-Wert (aka Nullzeiger).
b) Ja es muss wirklich eine Nullzeiger-Konstante sein.
[ Dieser Beitrag wurde am 03.07.2003 um 23:30 Uhr von HumeSikkins editiert. ]
-
Wer sagt, dass das gut ist, was der Standard da definiert?
-
Ich seh's ja ein.
@Bashar:
Stimmt, der Standard ist zwar gut, aber nicht immer optimal.
-
Der Standard ist nun mal das auf was man sich verlässt wenn man fremden Source bearbeitet....
[ Dieser Beitrag wurde am 04.07.2003 um 00:22 Uhr von Knuddlbaer editiert. ]
-
Wer sagt, dass das gut ist, was der Standard da definiert?
Keine Ahnung?
Aber soweit ich weiß entscheidet die C++ Community letztlich darüber was schlecht ist und was geändert werden muss.Nur auf was bezieht sich deine Frage eigentlich und welche Relevanz hat sie hier genau? Mein "das ist totaler Käse" hat hier einen klaren und eingeschränkten Kontext. Es ist Käse, da es nicht Standardkonform ist und damit konforme Programme potentiell kaputt macht. Andere Gründe habe ich überhaupt nicht berücksichtig.
Stimmt, der Standard ist zwar gut, aber nicht immer optimal.
Optimal ist auch völlig unrealistisch. Es kann imo in einer so heterogenen Umgebung kein optimal geben. Nur ein Kompromiss mit dem die Mehrheit der Leute Leben kann und der auf einem Lernprozess basiert den man Stück für Stück verfeinert.
Oder sind die beiden zitierten Sätze mehr so im Sinne von:
"Okkultismus ist gefährlich" oder "Drogen sind doof" gemeint?Irgendwie verstehe ich mal wieder den Punkt nicht.
-
Original erstellt von HumeSikkins:
[quote]Wer sagt, dass das gut ist, was der Standard da definiert?**
Nur auf was bezieht sich deine Frage eigentlich und welche Relevanz hat sie hier genau? Mein "das ist totaler Käse" hat hier einen klaren und eingeschränkten Kontext. Es ist Käse, da es nicht Standardkonform ist und damit konforme Programme potentiell kaputt macht. Andere Gründe habe ich überhaupt nicht berücksichtig.
[/QUOTE]**So klar fand ich das nicht, aber danke für die Aufklärung. Dann ist mein Einwand natürlich unberechtigt.