Frage zu Konstanten



  • Gibt es irgendwelche zusätzlichen Vorteile von Konstanten, ausser das man diese nicht mehr verändern kann?
    Ich sehe manchmal in Funktionsköpfen das Wort "const" stehen. Ist das als Gedankenstütze das man den Wert nicht mehr verändert? Als Sicherheit für irgendwelche arten das Programm zu manipulieren? Warum kann man in Klassen keine Konstante definieren, oder doch?



  • Hallo

    Gibt es irgendwelche zusätzlichen Vorteile von Konstanten, ausser das man diese nicht mehr verändern kann?

    Nein, das ist der einzige Unterschied und genau der gewünschte Effekt.
    Einen kleinen Unterschied gibts aber intern : PODs die als const markiert werden, und ihren Wert auch zur Compiletime erhalten, sind zur Laufzeit nicht mehr als echte Variablen im Speicher vorhanden, sondern der Wert wurde vom Compiler schon in die jeweiligen Zugriffe eingesetzt (wenn der Compiler optimiert)

    Ich sehe manchmal in Funktionsköpfen das Wort "const" stehen. Ist das als Gedankenstütze das man den Wert nicht mehr verändert?

    In erster Linie hilft es dem Compiler, um zu verhindern das logisch unveränderlichen Werte verändert werden. Ohne const müßte das in der Doku stehen, und dann bräuchtest du wirklich eine Gedankenstütze 😉

    Warum kann man in Klassen keine Konstante definieren, oder doch?

    Klar geht das. Warum sollte es nicht gehen?

    bis bald
    akari



  • @Konstanten in Klassen.

    Ich bekomme aber keine Konstante definiert im private Bereich. Wie müsste denn das aussehen damit es geht?



  • Entweder als static, wenn die Konstante für die gesamte Klasse gelten soll, oder in der Initialisierungsliste des jeweiligen Ctor's:

    class test
    {
      const int m_size;
    public:
      test(int size) : m_size(size) {}
    };
    


  • Ich habe ungefähr 10 Konstanten.. momentan sind es einfache Variablen, da ich es bisher nicht als Konstanten hinbekam.

    Der Code sieht etwas krass aus. Mhh, und wo wird da ein Wert festgelegt und wie mehrere? Vielleicht offensichtlich für andere, ich tu mich da gerade etwas schwer 😃



  • Wenn diese Konstanten global für alle Elemente deiner Klasse gelten soll, definier' sie statisch:

    class test
    {
      static const int max_size;
      ...
    };
    
    const int test::max_size = 100;
    

    (ansonsten siehe mein obiger Beitrag)



  • Hallo

    Wo der Wert festgelegt wird, ist dir überlassen.
    Zuerstmal must du entscheiden, ob du pro Klasse eine Konstante haben willst, oder pro erstellter Instanz eine eigene Konstante.
    Für den ersten Fall must du wie schon gesagt static verwenden, kannst aber auch einfach den Wert initialisieren

    class test
    {
      static const int m_size = 10;
    public:
      test() {};
    };
    

    Diese Konstante ist jetzt von Methoden der Klasse selber aus normal erreichebar, von außerbalb (wenn sie im public-Bereich wäre) per test::m_size

    Wenn du aber pro Instanz der KLasse eine eigene Konstante haben willst, must du wie CStoll gezeigt hat den Konstruktor benutzen.
    Dann kannst du eine Variable der Klasse test anlegen und ihr den konstanten Wert zuweisen :

    test mytest(3);
    

    Diese einzelne Instanz hat jetzt eine Konstante mit dem Wert 3.

    /Edit : zu spät... blödes Telefon.

    bis bald
    akari



  • Wau, danke schön für die umfangreich erklärenden Worte! Damit kann ich was anfangen und versteh es sogar. 👍


Anmelden zum Antworten