int a = 5;
const int b = a, c = 4;
int e[a];
int d[b];
int f[c];
Определение f[c]
является действительным.
Переменная b
также является константой int
, но компилятор выдал ошибку «выражение должно иметь постоянное значение» для строки int d[b]
. Каковы различия между b
и c
?
Термин «константа» действительно неоднозначен, а ключевое слово
const
вводит в заблуждение.const
означает: «не разрешать значение этого объекта не будет изменено после инициализации». Это не означает «постоянная времени компиляции». Его начальное значение может (и обычно имеет) все еще прибыть из источников времени выполнения.Вам нужна константа времени компиляции для границы массива.
Иногда возможно иметь объект с именем,
foo
который является константой времени компиляции, если он есть,const
и он был инициализирован из константного выражения, такого как литерал илиconstexpr
вещь. Это дело дляc
; это не такb
.источник