Kleine Verständnisfrage zu Pointern. [SOLVED]
-
Also Buchmaterial hab ich hier folgendes:
Dirk Louis - C++ programmieren mit einfachen Beispielen - M&T Verlag
Helmut Erlenkötter - C++ OOP von Anfang an.Online Materialien die ich zur Info nutze:
http://en.cppreference.com/w/cpp
http://www.brpreiss.com/books/opus4/html/book.html (Das Einzige wo cih etwas in der Art gefunden habe)
http://upload.wikimedia.org/wikibooks/de/5/59/Cplusplus.pdf
http://www.cplusplus.com/
http://www.cprogramming.com/tutorial.htmlUnd dann hab ich noch von einem Freund hier liegen C++ Primer Fifth Edition. (den bin ich grade am lesen btw.)
Sich C++ autodidaktisch zu erarbeiten ist teilweise mit vielen echten Stolperfallen versehen ....
-
Danke dir Cookie, das erklärt es besser als ich es irgendwo online gefunden habe.
-
cooky451 schrieb:
[...] (Durch wildes Gecaste kann man [nullref] zwar erzeugen, aber das ist nicht vorgesehen.)
Glaub' ich Dir nicht. Zeig' mal! :p
-
-
Schon. Aber das Dereferenzieren eines nullptr ist UB.
-
Ja..... .. . .. . .. . und?
-
Wer sagt Dir, daß bei UB eine Nullreferenz 'rauskommt?
-
Das meinst du nicht ernst.
-
Warum soll ich das nicht ernst meinen? Du wolltest mir zeigen, wie Du mit "wildem gecaste" eine Nullreferenz bastelst. Dein Code darf sich aber schon bei der Dereferenzierung mit Fug und Recht in Rauch auflösen.
-
Swordfish schrieb:
Warum soll ich das nicht ernst meinen? Du wolltest mir zeigen, wie Du mit "wildem gecaste" eine Nullreferenz bastelst.
Ja, also eine Referenz auf ein Objekt das nie existiert hat (und insbesondere Namenlos ist), ohne das der Compiler etwas davon mitbekommt.
-
Ein Ansatz, der ohne
*nullptr
auskommt, wär' zB. http://ideone.com/nWopP
Ob das legal ist, trau' ich mir aber nicht sagen.
-
Swordfish schrieb:
Ein Ansatz, der ohne
*nullptr
auskommt, wär' zB. http://ideone.com/nWopP
Ob das legal ist, trau' ich mir aber nicht sagen.Ist es nicht. Referenzen sind sprachlich gesehen keine Pointer, sondern eben nur Aliase:
8.3.2/4 schrieb:
It is unspecified whether or not a reference requires storage
Deswegen sind im Sinne der Sprache auch alle Fragen nach einer Nullreferenz nach dem Kompiliervorgang nicht sinnvoll.
-
... und ich könnt' jetzt sagen:
cooky451 schrieb:
Ja..... .. . .. . .. . und?
oder wir einigen uns d'rauf, daß auch durch wildes gecaste nie eine Nullreferenz 'rauskommen wird
...
-
Swordfish schrieb:
oder wir einigen uns d'rauf, daß auch durch wildes gecaste nie eine Nullreferenz
Oder einigen uns darauf, dass die Frage nach einer Nullreferenz im Sinne eines Pointers der == nullptr ist keinen Sinn macht, und dass man in C++ alle Referenzen Nullreferenzen nennen kann, die auf etwas Zeigen, was nie ein Objekt war. :p
-
cooky451 schrieb:
[...] und dass man in C++ alle Referenzen Nullreferenzen nennen kann, die auf etwas Zeigen, was nie ein Objekt war. :p
... was es de jure nicht gibt. :p
-
Der Standard spricht dieses Problem direkt an:
ISO/IEC 14882:2003 8.3.2 (4) schrieb:
(...) [Note: in particular, a null reference cannot exist in a well-defined program, because the only way to create such a reference would be to bind it to the "object" obtained by dereferencing a null pointer, which causes undefined behavior. (...)
Ob man das jetzt so versteht, dass es Null-Referenzen per Standard nicht gibt oder so, dass man, wenn man eine Null-Referenz hat, tief in Latrineninhalt steckt, ist letztlich Ansichtssache.
Ich möchte aber anmerken, dass de facto de facto wichtiger ist als de jure.
-
seldon schrieb:
Der Standard spricht dieses Problem direkt an:
ISO/IEC 14882:2003 8.3.2 (4) schrieb:
(...) [Note: in particular, a null reference cannot exist in a well-defined program, because the only way to create such a reference would be to bind it to the "object" obtained by dereferencing a null pointer, which causes undefined behavior. (...)
Ob man das jetzt so versteht, dass es Null-Referenzen per Standard nicht gibt oder so, dass man, wenn man eine Null-Referenz hat, tief in Latrineninhalt steckt, ist letztlich Ansichtssache.
Welchen Teil von "cannot exist" hast du nicht verstanden?
seldon schrieb:
Ich möchte aber anmerken, dass de facto de facto wichtiger ist als de jure.
Wichtiger bei was? Worum geht es hier eigentlich?
-
TyRoXx schrieb:
Welchen Teil von "cannot exist" hast du nicht verstanden?
Wenn der Satz "Der Himmel ist tagsüber blau, sofern es nicht gerade bewölkt ist" irgendwo auftaucht, fragst du auch nicht "Welchen Teil von 'der Himmel ist tagsüber blau' hast du nicht verstanden?".
Der "in a well-defined program"-Teil ist in der Praxis durchaus von Bedeutung. Wenn man doch mal einen Fehler macht und eine (de facto) Nullreferenz hat, hilft es einem beim Debugging wenig, darüber zu jammern, dass es diese per Standard ja eigentlich gar nicht gibt.
-
seldon schrieb:
Ich möchte aber anmerken, dass de facto de facto wichtiger ist als de jure.
+1 für Satzbau