Const in Klassen



  • Hallo!

    Ich bin verzweifelt. Ich hab herum gegooglet und nix gescheites gefunden.
    Ich würde gerne in meiner Klasse einen const int erstellen und diesen dann logischerweise auch einen Wert zuweisen. Das klappt aber nicht. "muss ein änderbarer lvalue sein".

    Wie weise ich in Klassen Constanten einen Wert zu?

    Danke schonmal,
    MfG Bizarreofnature!



  • Geht so:

    struct S { 
      const int i; 
      S(int i) : i(i) {}
    };
    
    S s(42);
    


  • Danke für die Antwort. So halbwegs habe ich es verstanden. Könntest du bitte nochmal diese Zeile erläutern?

    S(int i) : i(i) {}
    

    Das mit dem i(i) ist mir nicht ganz klar.



  • Hinter dem Doppelpunkt folgt eine Initialisierungsliste (initializer-list). In diesem Fall wird die Membervariable i mit dem Wert des Konstruktorparameters i initialisiert.



  • Danke. Ist ja eigentlich recht simpel.
    Noch eine letzte Frage...
    Ist es überhaupt ratsam in Klassen const zu verwenden?
    Gibt es Alterantiven?



  • Bizarreofnature schrieb:

    Ist es überhaupt ratsam in Klassen const zu verwenden?

    https://www.c-plusplus.net/forum/319334-full



  • Aha, ich sehe. Const ist also Unfug.

    Danke dir 🙂



  • Nein, const ist überhaupt kein Unfug.

    Ja, es gibt viele Leute die const bei non-staic Membern komisch/doof/unnötig finden. Genau so wie ich const bei Parametern komisch und doof finde. Unnötig (bzw. sinnfrei, wie ich in dem verlinkten Beitrag geschrieben habe) finde ich es nicht mehr, ich mag mich bloss nicht dran gewöhnen. Sieht an der Stelle (also im Funktionskopf) für mich halt nur bekloppt aus.

    Wenn du was hast, was sich nicht ändert, nicht ändern kann, nicht ändern soll, dann mach es const. Wenn's nur schwer geht, weil man extra Hilfsfunktionen dafür schreiben müsste oder ähnliches, dann ist es den Aufwand vermutlich nicht unbedingt wert. Grundsätzlich finde ich es aber auf jeden Fall praktisch bei einer Variable sagen zu können "die kann sich nicht ändern". Ob das jetzt ne globale, lokale oder Membervariable ist, ist dabei für mich egal.


Log in to reply