c++ - Ich kann die Länge eines Arrays mit einer Konstanten definieren. Warum funktioniert das nicht?




(4)

    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 auch 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 ?


Was sind die Unterschiede zwischen b und c?

c hat einen Initialisierer für die Kompilierzeitkonstante, b nicht. Ein const-Objekt mit einem Initialisierer für die Kompilierungszeitkonstante ist selbst ein Wert für die Kompilierungszeitkonstante.

Da ich mit einer Konstanten ein Zehntel einer Arry definieren kann, warum funktioniert das dann nicht?

Nicht irgendeine Konstante reicht aus. const Qualifikationsmerkmal impliziert eine Laufzeitkonstanz (dh der Wert kann zur Laufzeit bestimmt werden, ändert sich jedoch während der gesamten Lebensdauer des Objekts nicht). Nur Kompilierzeitkonstantenwerte können als Arraygröße verwendet werden.


"Const" bedeutet nur, dass sich die Variable zur Laufzeit nicht ändert und dass ihr Wert zur Kompilierungszeit abgeleitet werden kann.

Ich denke, was Sie suchen, ist "constexpr". Vielleicht kannst du es so ausprobieren:

constexpr int b = 4; // can't be assigned from a!
int d[b];

Der "constexpr" bedeutet stattdessen eine "echte Konstante" und die "Konstante" bedeutet aus irgendeinem historischen Grund nur "unveränderliche Var". Es muss beachtet werden, dass ein natives Array in c ++ immer eine feste Länge hat, wie @Bathsheba sagte.


Die Compiler-Diagnose sollte eigentlich ein zur Kompilierzeit auswertbarer konstanter Ausdruck sein .

Da das ursprüngliche Objekt, dem b zugewiesen ist, nicht const , ist b kein auswertbarer Konstantenausdruck für die Kompilierungszeit, sodass die Kompilierung fehlschlägt, da Arrays variabler Länge in Standard-C ++ nicht unterstützt werden.


Sie verwenden eine nicht konstante Variable, um einer Konstante einen Wert zuzuweisen. Daher kann der Wert dieser Variablen nicht zur Kompilierungszeit bestimmt werden . Ich weiß, dass Sie a nicht ändern, aber der Compiler denkt nicht so.





c++