Memberzuweisung mit gleichem Namen - was macht der Compiler?



  • Hallo,

    Seit langer Zeit versuche ich folgendes zu umgehen, frage mich aber, was der C++-Standard daraus macht:

    class A
    {
        A(int b)
        {
            b = b;
        };
    
        int b;
    }
    


  • Lokale Variablen ueberdecken andere mit gleichem Namen. Bei b=b im Konstruktor wird nur das b verwendet, das als Parameter angegeben ist.



  • DarthZiu schrieb:

    ...was der C++-Standard daraus macht:

    class A
    {
        A(int b) // mit b Deklarierst du eine lokal gültige Variable
        {
            b = b; // lokale Variablen haben immer Vorrang
        };
    
        int b;
    }
    

    Du kannst aber in diesem Fall auf 2 Arten dein Problem umgehen:

    class A
    {
        A(int b)
        :   b(b) // Stichwort: Initialisierungsliste [links steht Member)
                 // - Nur in Konstruktoren möglich (und einer nachträglichen
                 //   Zuweisung vorzuziehen.
        {
            // Oder (auch in anderen Funktionen möglich)
            this->b = b;
            // Mittels this-> greifst du auf den Member zu.
        };
    
        int b;
    }
    


  • asc schrieb:

    Du kannst aber in diesem Fall auf 2 Arten dein Problem umgehen:

    class A
    {
        A(int b)
        :   b(b) // Stichwort: Initialisierungsliste [links steht Member)
                 // - Nur in Konstruktoren möglich (und einer nachträglichen
                 //   Zuweisung vorzuziehen.
        {
            // Oder (auch in anderen Funktionen möglich)
            this->b = b;
            // Mittels this-> greifst du auf den Member zu.
        };
    
        int b;
    }
    

    Ja danke. Zurzeit mach ich es immer Zweifel dann immer mit this oder mit nem anderen Namen. Hat mich nur mal interessiert, was der Standard sagt.

    Danke


Log in to reply