struct: Ctor Argument Variablennamen?



  • Abend!

    Folgender Fall:

    struct Person {
        string name;
        int alter;
    
        Person(string name_, int alter_) : name(name_), alter(alter_) { }
    };
    

    Um die Ctor Argumente in der Initialisierungsliste benutzen zu können, habe ich einen Unterstrich an den Parameternamen angehängt. Wie macht ihr das? Gibt es da einen Quasi Standard in C++?



  • Du kannst den Unterstrich sparen, hier dürfen beide Namen gleich sein.



  • Ich mach das so, meine IDE zeigt mir die Membervariabeln in einer anderen Farbe an. Sobald ich Code mit Unterstrichen überfliege kommen mir die immer wie Leerzeichen vor und das macht das Lesen sehr anstrengend.

    struct Person {
        string name;
        int alter;
    
        Person(string name, int alter) : name(name), alter(alter) { }
    };
    


  • Was, die Namen dürfen gleich sein? 😮

    Haben die da was geändert? Ich weiß noch, dass ich vor ein paar Jahren Probleme damit hatte. Offenbar addressierten damals beide Namen den Member.


  • Mod

    fcb1 schrieb:

    Was, die Namen dürfen gleich sein? 😮

    Haben die da was geändert?

    Nein, das war schon immer so.

    Ich weiß noch, dass ich vor ein paar Jahren Probleme damit hatte. Offenbar addressierten damals beide Namen den Member.

    Dann hast du entweder was falsch gemacht oder einen nicht-standardkonformen Compiler gehabt.



  • fcb1 schrieb:

    Offenbar addressierten damals beide Namen den Member.

    Ja, das ist noirmal.

    struct Person {
        string name;
        int alter;
    
        Person(string name, int alter) : name(name), alter(alter) { }//klappt
        Person(string name, int alter) { name=name; alter=alter; }//fehler
        Person(string name, int alter) { this->name=name; this->alter=alter; }//klappt
    };
    


  • Offenbar addressierten damals beide Namen den Member.

    Wann war "damals"? (Und was sind "beide Namen", ich denke es geht nur um einen Namen?) Ich halte das für unwahrscheinlich. Der Parameter überdeckt logischerweise den Member.



  • struct Person {
        string name;
        int alter;
     
        Person(string name, int alter) : name(name), alter(alter) { }//klappt
        Person(string name, int alter) { name=name; alter=alter; }//fehler
        Person(string name, int alter) { this->name=name; this->alter=alter; }//klappt
    };
    

    Noch eine Alternative, der Vollständigkeit halber:

    Person(string name, int alter) { Person::name=name; Person::alter=alter; }
    


  • Nicht schlecht, aber stimmt, eine Klasse spannt auch immer einen Namensraum auf.


Anmelden zum Antworten