Bedeutung des Adressoperators hinter dem Typ



  • Uff,

    als Java-Programmierer wird mir die Einarbeitung in C++ vor allem mit den Zeigern noch einige Zeit kosten.

    Was heisst dieser Ausdruck der wxWidgets-Lib zum Konstruktor von wxTextCtrl:

    wxTextCtrl( .... const wxString& value = "", ...... ) {}
    

    Hier steht der Adressoperator hinter dem Typ, das ist mir nicht klar, was dass dann heisst?



  • Referenz!
    In C++ ist die Standardsemantic Wertübergabe, also verhalten sie wie in Java die primitive Datentypen. Deswegen kann man C++ sagen ich will die Referenz mit dem Adressoperator.



  • Das ist gar kein Adressoperator, sondern ein Referenz-Typ-Definierer.

    int c;
    int* a=&c; //Zeiger auf int
    int& b=c; //Referenz auf int
    
    *a=5; //Da wo a hinzeigt, wird 5 reingeschrieben, also c=5
    b=6; //Da wo b hinzeigt, wird 6 reingeschrieben (obwohl kein *!), also auch c=6
    

    Referenzen sind sozusagen Zeiger, wo immer bei jeder Verwendung der * automatisch dazugeschreiben wird.

    Das hat zum Effekt, daß Referenzen, wenn sie einmal zugewiesen wurden, was nur bei der Definition der Referenz geht, also sofort beim Anlegen, daß sie ab dann immer auf dieses Objekt zeigt. Das hat zum Effekt, daß man sie auch andersrum sehen kann, eine Referenz auf ein Ding ist nur ein anderer Name für das Ding.

    Referenzparameter bei Funktionen, wie hier, ziehen sich die Adresse automatisch.

    Daher kann man sogar machen

    void f(int& a){
      a+=2;
    }
    ...
    f(x);
    

    statt

    void f(int* a){
      (*a)+=2;
    }
    ...
    f(&x);
    


  • Danke, jetzt wurde das Stirnrunzeln gleich weniger!


Anmelden zum Antworten