Zeiger, Referenz oder was ?!
-
Hi,
ich hab ne Frage, die sicherlich leicht beantwortet werden, kann aber ich bin etwas verwirrt dadurch...
In Scott Meyers/"Mehr effektiv C++" hab ich folgendes gelesen (Richtlinie 13):class exception{...}; void someFunction() { static exception ex; // Exception-Object ... throw &ex; // wirf einen [b]Zeiger[/b] als Exception } ... // blablabla
Meine Frage nun dazu: Warum is &ex ein Zeiger ??? Ich dachte Dinge die mit & definiert sind, sind Referenzen und wenn sie mit & dereferenziert werden, handelt es sich dabei um Adressen. Kann mir das einer vielleicht verstaendlicher erklaeren, wo sind meine Fehler - Danke.
-
wendy schrieb:
Meine Frage nun dazu: Warum is &ex ein Zeiger ??? Ich dachte Dinge die mit & definiert sind, sind Referenzen
Da hast du auch Recht, aber hier wird nichts definiert.
und wenn sie mit & dereferenziert werden, handelt es sich dabei um Adressen.
mit & "de"referenziert man nicht. Dereferenzieren heißt, einen Zeiger zu nehmen, und auf die Stelle zuzugreifen, auf die er zeigt. Das tut man normalerweise mit dem *-Operator, der deshalb auch Dereferenzierungsoperator heißt.
Der unäre &-Operator ist das Gegenteil davon (der Referenzierungsoperator, wenn man so will). Er bildet von einem Lvalue die Adresse in Form eines Zeigers auf diesen Lvalue:
int x; int *p = &x; // p verweist auf x, indem ich p mit der Adresse von x initialisiere
Tja und genau das passiert hier. Exceptions können in C++ beliebige Objekte sein, also warum nicht auch Zeiger ... throw &ex wirft die Adresse von es.
-
&ex;
Das & ist hierbei der Adress-Operator. Du derefenzierst Variable ex, d.h.
du ermittelst deren Adresse und "wirfst" diesen Wert, also die Adresse, als
Exception.
-
"I can see clearly now - the rain is gone! ..."
Danke Euch beiden, jetz ist mir wieder einiges klarer.