const nach Funktionsname??



  • Hab mal ne Frage: was bedeutet eigentlich das const nach der deklaration des funktionsrumpfes:

    void foo (void) const;
    

    ist das bei klassenfunktionen, die ihre members nicht verändern oder was hat das für einen sinn??



  • Ja, aber nicht nur Klassenvariablen, sondern auch Instanzvariablen.



  • todo schrieb:

    Hab mal ne Frage: was bedeutet eigentlich das const nach der deklaration des funktionsrumpfes:

    Das const muss sowohl bei der Deklaration des FunktionsKOPFES sowie bei der
    Definition (wenn nicht eh inline) dabeistehen.

    ist das bei klassenfunktionen, die ihre members nicht verändern oder was hat das für einen sinn??

    Bei Klassenfunktionen macht das garkeinen Sinn (die haben keinen this-Zeiger). Nur nichtstatische Memberfunktionen können const sein. Dabei wird quasi der this-Zeiger selbst const (const T* const this).
    Wie Auswirkungen sind, wie du schon richtig gesagt hast:
    - Du kannst keine Membervariablen in der Methode verändern
    - Du darfst nur konstante Membermethoden aufrufen



  • gibt es einen Unterschied zwischen:

    const void foo();
    //und
    void foo() const;
    

    ???



  • ...nennt man auch read-only-Bezeichner
    und wie interpreter schon sagte: bei Deklaration und Definition anzugeben.
    Kannst auch für jede Elementfunktion 2 Versionen (eine mit und eine ohne const) implementieren:
    die read-only-Version wird dann für konstante Objekte und die andere für die nichtkonstanten aufgerufen



  • const void foo(); kann man nicht für konstante Objekte aufrufen



  • Hi,

    const void foo() ist insofern komisch, als dass z.B. ein const int foo() das ohnehin sinnlose Zuweisen an die Funktion vermeidet:

    const int foo()
    {
    return 10;
    }
    
    int main()
    {
    foo() = 20;
    
    return 0;
    }
    

    Daher ist const void... komisch.

    MfG Eisflamme



  • 1)wie Mis2com sagte: const void foo() == Blödsinn
    const bei Rückgabetyp imho nur sinnvoll, wenn Rückgabetyp Pointer auf irgendwas, da zB bei
    const int * foo() die aufrufende Fkt den als Rückgabe adressierten Speicherbereich nur lesen darf
    2)oder eben in OOP: read-only-Methode (nur lesender Zugriff auf aktuelles Objekt)
    void foo()const



  • Mis2com schrieb:

    const void foo() ist insofern komisch, als dass z.B. ein const int foo() das ohnehin sinnlose Zuweisen an die Funktion vermeidet:

    const int foo()
    {
    return 10;
    }
    
    int main()
    {
    foo() = 20;
    
    return 0;
    }
    

    dafür brauchst du aber auch kein const.

    wie auch immer, der standard macht auch für void keine ausnahme.
    sonst wäre sowas schlecht möglich:

    template <class R>
    const R blub () { return R(); }
    //...
    blub<void>();
    

Anmelden zum Antworten