Darf man den Adressoperator auf Referenzen loslassen?



  • der Code ist okay. Zumindest benutzen auch C++-Gurus und Standard-Komitee-Mitglieder solchen Code.



  • Ok, dann bin ich happy. 🙂



  • I hätte da mal ne Frage. Wie kriegt man eigentlich ein Pointer auf eine Referenze und nicht das referezierte Objekt



  • hallo schrieb:

    I hätte da mal ne Frage. Wie kriegt man eigentlich ein Pointer auf eine Referenze und nicht das referezierte Objekt

    Das wurde doch (auf Umwegen) gerade gesagt: Mit dem Adressoperator



  • nein, eben nicht mit dem Adress-Operator.

    Einen Pointer auf Referenzen kann man nicht erhalten. Vom Standard her müssen Referenzen auch nicht unbedingt Speicherbelegen.

    Aber wozu sollte man einen Pointer auf eine Referenz wollen?



  • Hi,

    unter KDevelop geht es:

    #include <iostream.h>
    //[Edit]: #include <iostream>
    //        using namespace std;
    //[/Edit]
    
    int main()
    {
        struct Hi
        {
          int a;
        };
        Hi H;
        Hi& Hallo = H;
        Hi * i = &Hallo;
    
        cout << "Weise H.a 25 zu" << endl;
        H.a = 25;
        cout << "Wert von H.a:" << H.a << endl;
        cout << "Weise Hallo.a 32 zu" << endl;
        Hallo.a = 32;
        cout << "Wert von H.a:" << H.a << "\n" << "Wert von Hallo.a:" << Hallo.a << endl;
        cout << "Weise i->a 500 zu" << endl;
        i->a = 500;
        cout << "Wert von H.a:" << H.a <<"\n" << "Wert von i->a:" << i->a << endl;
    }
    

    Aber wenn es nicht Standardkonform ist, hat es ja keinen Sinn. Wobei, wie du richtig bemerkt hast, es keinen Sinn hat, einen Zeiger auf eine Referenz verweisen zu lassen. Mir fällt zumindest kein Beispiel ein... :xmas1:



  • Was soll an dem Code (abgesehen von iostream.h) nicht standardkonform sein?

    Die Adresse einer Referenz wird nirgends verwendet.
    i ist ein Hi*, ein Zeiger auf Hi; ein Zeiger auf eine Referenz wäre Hi&* ("Pointer to a Reference to Hi", von rechts nach links lesen). Und das wird jeder C++ Compiler zurückweisen.



  • Stimmt: das nimmt er nicht an:

    main.cpp:18: error: cannot declare pointers to references
    


  • Ist aber Blödsinn, weil er ja nur indirekt, wenn man beschreibt, auf die Referenz zeigen würde, er speicfhert Adressen und die Adresse der Referenz ist gleich der Adresse der Variable, also wird das automatisch ein Zeiger zu der Variable.

    Hier durch wird verhindert, dass man versucht die Adresse über die Referenz zu bekommen, was ich für dumm halte, besonders, wenn man nur die Referenz hat.

    MfG MAV



  • nein, eben nicht mit dem Adress-Operator.

    Dachte ich mir es doch.

    Aber wozu sollte man einen Pointer auf eine Referenz wollen?

    Keinen besondern Grund. Ich wollte nur wissen ob und wie es geht.

    Ich hab mir die Sache mal durch den Kopf gehen lasses und bin zum dem Schluss gekommen, dass es unmöglich ist. Denn Referenze und Objekt verhalten sich bei allen Operatoren gleich, somit fallen sämtlich Operatoren als Lösung aus. Nur bei Funktionen verhalten sich Referenze und Objekt verschieden, jedoch wird von der Referenze eine Kopie erstellt die an die Funktion übergeben wird somit kann man auch damit nicht die Addresse der ursprünglichen Referenze ermitteln. Eine Referenze auf eine Referenze gibt es nicht somit fällt auch das flach.


Anmelden zum Antworten