Konstanten

Eine Konstante ist eine Variable, die ihren Wert nicht ändern kann. zB PI (3.1415) sinnvoll als Konstante zu implementieren (denn schließlich soll es nicht möglich sein PI den Wert 7 zuzuweisen).

Um eine Konstante zu erstellen gibt es das Schlüssekwort const. Wenn wir eine Variable als const deklarieren, dann bedeutet dies für den Compiler dass er uns dieser Variablen nichts zuweisen lässt (den Wert der Konstanten müssen wir bei der Initialisierung schon wissen, danach ist ein ändern nicht möglich).

    float const PI=3.1415;
    int const DREI=3;

    //illegal:
    int const test=7;
    test=9;

Statt int const kann man auch const int schreiben, beides bedeutet das selbe. Allerdings sollte man bei der Variablendeklaration immer von Rechts nach Links lesen, so dass man float const PI so liest: (Die Variable) PI ist vom Typ const float. Später werden wir wesentlich komplexere Deklarationen kennen lernen, da werden wir dann sehen, wie sinnvoll diese Regel ist.

Bei Konstanten gibt es 2 wichtige Sachen zu unterscheiden: Runtime-Konstanten und Compiletime-Konstanten. Runtime heißt Laufzeit, also erst während der Ausführung des Programmes. Compiletime-Konstanten stehen allerdings schon fest, wenn das Programm kompiliert wird:

Der Compiler macht aus int i=5*2; direkt ein int i=10; Denn 5 und 2 sind Compiletime-Konstanten, und mit diesen kann der Compiler zaubern.

Eine Variable die als const deklariert ist, muss keine Compiletime-Konstante sein:

    #include<iostream>
    using namespace std;

    int main()
    {
      int t;
      cin>>t;
      int const Konstante=t;
    }

Es ist offensichtlich, dass Konstante zwar konstant ist, aber trotzdem erst zur Runtime feststehen kann. Bei int const i=5; ist i wiederum eine Compiletime-Konstante.

    int i=5;
    int const c=i;

Ist c eine Compiletime Konstante oder eine Runtime Konstante? Obwohl der Wert von c garantiert 5 beträgt, so ist i eben keine Konstante und kann somit (theoretisch) geändert werden. i muss also nicht zwangsläufig den Wert 5 haben wenn wir c initialisieren. Für uns ist das offensichtlich, aber der Compiler hält sich an eine Regel: eine Konstante ist nur dann eine Compiletime Konstante, wenn der Wert mit dem sie initialisiert wird eine Compiletime Konstante ist. Und i ist definitiv keine Compiletime Konstante. Das ist ein bisschen verwirrend, aber du wirst den Unterschied zwischen Compiletime- und Runtime Konstanten bald heraus haben.

top