Verständnis Frage const



  • Hallo, könnte mir einer den Unterschied zwischen

    const im Parameter und cons nach Methodenname erklären.

    Also bsp.

    testFunc(const A &a)
    

    vs

    testFunc(A &a) const
    

    vs

    testFunc(const A &a) const
    

    .

    Vielen Dank



  • testFunc(const A &a)
    

    Du kannst die Variable, auf die a verweist, nicht ändern.

    testFunc(const A a)
    

    Du kannst die Variable a nicht ändern.

    testFunc(...) const
    

    Innerhalb der Funktion kannst du keine Member deines Objekts ändern.



  • out schrieb:

    testFunc(...) const
    

    Innerhalb der Funktion kannst du keine Member deines Objekts ändern.

    Genauer gesagt, die hier genannte "Funktion" kann nur eine Memberfunktion (-> Methode) sein, wobei du auf this nur lesend zugreifen kannst.



  • Dann ist ja eine Definition wie

    testFunc(const A &a) const
    

    unnötig oder?



  • DKlay13 schrieb:

    Dann ist ja eine Definition wie

    testFunc(const A &a) const
    

    unnötig oder?

    Ne wieso? Erklät mal wieso das unnötig sein soll?



  • Per Definition kann ich auf das Objekt ja nur lesend zugreifen. Wenn ich das so definiere

    testFunc(const A &a)
    

    also "könnte" man ja nur per const_cast evtl noch am Objekt was ändern...



  • DKlay schrieb:

    Per Definition kann ich auf das Objekt ja nur lesend zugreifen. Wenn ich das so definiere

    testFunc(const A &a)
    

    Richtig, du kannst nur auf das Objekt, auf das a verweist, lesend zugreifen.

    testFunc() const
    

    Das const hinterm Funktionsnamen bezieht sich aber auf das Objekt this.

    DKlay schrieb:

    also "könnte" man ja nur per const_cast evtl noch am Objekt was ändern...

    Nur wenn das Objekt auf oberste Ebene nicht const ist. Ansonsten formatiert es deinen PC.



  • Ansonsten formatiert es deinen PC.

    😃 😃 , das probiere ich mal demnächst.

    Und Danke für die Antworten, muss mal damit rumspielen!



  • Wie gesagt, es gibt mehrere Objekte - je nach dem.

    void foo(Bar const& b)
    {
        b.modifySomething(); // geht nicht
        b.readSomething(); // geht
    }
    

    In der Funktion gibt es nur das Objekt b, was man ändern könnte (oder auch nicht!).

    void Foo::baz() const
    {
        this->counter = 5; // geht nicht
        cout << this->counter << endl; // geht
    }
    

    In dieser Methode gibt es auch nur ein Objekt und zwar this. Das kannst du nicht ändern, da die Methode const ist.

    void Foo::baz(Bar const& b) const
    {
        this->counter = 5; // geht nicht
        b.setCounter(35); // geht nicht
        cout << this->counter << " - " << b.getCounter() << endl; // geht
    }
    

    Hier existieren 2 Objekte, this und b. Beide können nicht geändert werden, sondern sind readonly.

    Beachte: Auf const Objekten können auch nur const-Methoden aufgerufen werden.


Anmelden zum Antworten