int a = 5;
const int b = a, c = 4;
int e[a];
int d[b];
int f[c];
Definicja f[c]
jest poprawna.
Zmienna b
jest również stała int
, ale kompilator dał mi błąd „wyrażenie musi mieć stałą wartość” dla wiersza int d[b]
. Jakie są różnice między b
i c
?
Termin „stały” jest naprawdę niejednoznaczny, a słowo kluczowe
const
wprowadza w błąd.const
oznacza: „nie zezwalaj, aby wartość tego obiektu nie uległa zmianie po inicjalizacji”. To nie nie oznacza „stałą czasu kompilacji”. Jego początkowa wartość może (i zwykle ma) nadal pochodzić ze źródeł wykonawczych.Potrzebujesz stałej czasowej kompilacji związanej z tablicą.
Czasami możliwe jest posiadanie nazwanego obiektu,
foo
który jest stałą czasową kompilacji, jeśli tak jestconst
i został zainicjowany ze stałego wyrażenia, takiego jak literał lubconstexpr
rzecz. Tak jest w przypadkuc
; tak nie jestb
.źródło