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.


Anmelden zum Antworten