const ganz hinten



  • int Frustrum::ContainsSphere(const Sphere& refSphere) const
    

    Das sehe ich zum ersten mal. Was sucht das const hinter der Methode?



  • sie darf keine membervariablen ändern



  • *g*. d.h. dass this konstant ist (normal: C * const this; -- jetzt: C const * const this;)
    oder einfacher: in der member-funktion lässt sich das aufrufende objekt nicht verändern

    [ Dieser Beitrag wurde am 08.04.2003 um 19:16 Uhr von Mr. N editiert. ]



  • Original erstellt von <const>:
    sie darf keine membervariablen ändern

    außer als mutable deklarierte.



  • (normal: C * const this

    <klugscheiß>
    Nö. this hat in einer Memberfunktion einer Klasse X den Typ X* nicht X* const.
    Ist die Memberfunktion als const deklariert, so ist der Typ const X* nicht const X* const.
    </klugscheiß>
    Da this nach 9.3.2 ein "non-lvalue" ist, kann this nicht verändert werden und deshalb ist der Effekt vergleichbar mit der Aussage this hätte den Typ X* const.



  • wieso hat this dann nicht den typ Klase*const? die antwort lautet: 42



  • wieso hat this dann nicht den typ Klase*const? die antwort lautet: 42

    Eine andere Antwort lautet: Es wäre redundand.
    "non-lvalue" sagt schon mehr aus. Ein const fügt keine relevante Information mehr hinzu. Das const wäre redundand. Und Standards bemühen sich Redundanz zu vermeiden.

    Wer an einer viel längeren und besseren Erklärung interessiert ist, dem empfehle ich eine Suche in comp.lang.c++.moderated. Da lief ein ähnliches Thema vor ein paar Tagen/Wochen.



  • aber non-lvalue steht nicht im code. ein nettes ide integriertes typinformationssystem könnte mir immer den typ Klasse*const zeigen, ansonsten müsste ich den Standard ständig auswendig können...
    außerdem sagt *const doch implizit "non-lvalue", und non-lvalue sollte implizit *const sagen.



  • Original erstellt von HumeSikkins:
    **Und Standards bemühen sich Redundanz zu vermeiden.
    **

    😃 😃 Davon merkt man bei C++ nichts 😃 😃



  • Davon merkt man bei C++ nichts

    Tatsächlich. Könntest du mir dann bitte mal deine Version des Standards schicken. Ich habe mit der offiziellen immer so meine Probleme, da dort alles möglichst knapp verklausuliert ist.

    aber non-lvalue steht nicht im code. ein nettes ide integriertes typinformationssystem könnte mir immer den typ Klasse*const zeigen, ansonsten müsste ich den Standard ständig auswendig können...
    außerdem sagt *const doch implizit "non-lvalue", und non-lvalue sollte implizit *const sagen

    Nein. Const sagt eben nicht automatisch non-lvalue. Ein const kann ich auch erlaubterweise wegcasten, wenn es sich bei dem Objekt nicht tatsächlich um ein const-Objekt handelt.

    Ich müsste also schreiben "this ist vom Typ X* const *und* ein non-lvalue".

    Andersherum reicht das non-lvalue aber auch alleine.



  • **lol**
    const_cast und C-Casts verbieten.
    also this = new blub; ist nicht erlaubt.
    naja, wäre auch sinnlos...
    ich glaub, was lars sagen will, ist, dass C++ schon eine sseeeehr überladene Syntax hat 😃



  • Original erstellt von HumeSikkins:
    **Tatsächlich. Könntest du mir dann bitte mal deine Version des Standards schicken. Ich habe mit der offiziellen immer so meine Probleme, da dort alles möglichst knapp verklausuliert ist.
    **

    Das war auf die Sprache und nicht auf den Standard bezogen.


Anmelden zum Antworten