int a = 5;
const int b = a, c = 4;
int e[a];
int d[b];
int f[c];
Die Definition von f[c]
ist gültig.
Die Variable b
ist ebenfalls eine Konstante int
, aber der Compiler gab mir den Fehler "Ausdruck muss einen konstanten Wert haben" für die Zeile int d[b]
. Was sind die Unterschiede zwischen b
und c
?
Der Begriff "Konstante" ist wirklich mehrdeutig und das Schlüsselwort
const
ist irreführend.const
bedeutet: "Nicht zulassen, dass der Wert dieses Objekts nach der Initialisierung nicht geändert wird". Dies bedeutet nicht "Kompilierungszeitkonstante". Sein Anfangswert kann (und wird normalerweise) immer noch aus Laufzeitquellen stammen.Sie benötigen eine Konstante zur Kompilierungszeit für ein gebundenes Array.
Es ist manchmal möglich, ein Objekt mit dem Namen
foo
Compile-Time-Konstante zu haben, wenn esconst
und ist es aus einem konstanten Ausdruck wie einem Literal oder einem initialisiert wurdeconstexpr
. Das ist der Fall fürc
; es ist nicht der Fall fürb
.quelle