Zeiger per Referenz als const übergeben; Warum so umständlich?



  • Hi,

    wenn ich z.B. folgende Methode habe:

    void f( const CDummy*& param );
    

    und diese von irgendwo aufrufen will, z.B. so:

    ...
    CDummy* d = new CDummy[5];
    ...
    f(d);
    

    Dann geht das nicht, weil der Compiler CDummy* nicht nach const CDummy*& konvertieren kann. Wenn ich aber z.b. sowas mache:

    ...
    CDummy* d = new CDummy[5];
    ...
    const CDummy* pTmp = d;
    f(pTmp);
    

    Dann geht es natürlich. Ist aber halt nur ziemlich nervig, weil das so umständlich ist.



  • Wieso willst du den Zeiger denn per konstanter Referenz übergeben?



  • Arki schrieb:

    void f( const CDummy*& param );
    

    Hallo Leute. Bin nach wie vor C++-Noob und kenne folgenden Ausdruck nicht...

    *&
    

    Weiß zwar was beide Zeichen tun wenn man man sie einzeln verwendet, aber diese Kombination habe ich noch nie gesehen.
    Kann mir da jemand vielleicht ein Schlagwort nennen ? (Bitte nicht "Google")

    Danke

    Blue

    P.s.: Ups, hätte ich vielleicht nen eigenen Thread für die Frage aufmachen sollen ?



  • Dann lös doch beide Zeichen nacheinander auf - das Konstrukt ergibt eine Referenz auf einen Zeiger auf einen 'const CDummy').



  • int a = 44; // normale int definition
    /* Speicher ( Adresse:Name:Wert)
     -----------------------
    |  1000 |   a   |  44   |
     -----------------------
    |  1004 |       |       |        
     -----------------------
    */
    
    int *p = &a; // Zeiger auf ein int 
    /* Speicher ( Adresse:Name:Wert)
     -----------------------
    |  1000 |   a   |  44   |
     -----------------------
    |  1004 |   p   |  1000 |        
     -----------------------
    */
    
    int &ref1 = a; // Referenz auf ein int
    /* Speicher ( Adresse:Name:Wert)
     --------------------------
    |  1000 | a & ref1 |  44   |
     --------------------------
    |  1004 |   p   |  1000    |        
     --------------------------
    */
    
    int *&ref2 = p; // Referenz auf ein Zeiger-int
    /* Speicher ( Adresse:Name:Wert)
     --------------------------
    |  1000 | a & ref1 |  44   |
     --------------------------
    |  1004 | p & ref2 |  1000 |        
     --------------------------
    */
    
    void func( int*& refPtr );
    void func(p); // refPtr in func() ist jetzt nur ein anderer Name für den Pointer der übergeben wurde ...
    


  • Ahh, ich verstehe....
    Danke, schöne Erklärung.

    Gruß

    Blue



  • @Arki:
    http://www.parashift.com/c++-faq-lite/const-correctness.html#faq-18.17

    Ist genau das gleiche.
    Wenn du aus dem "Foo const*&" ein "Foo const*const&" machst geht es.


Anmelden zum Antworten