Объясните пожалуйста, почему не работает последняя строка следующего примера:
const int i[] = { 1, 2, 3, 4 }
float f[i[3]]; // compile error
В объяснении говорится: "В таких ситуациях
const означает "область памяти с неизменным содержимым". Тем не менее, это значение не может использоваться во время компиляции, поскольку компилятор может не знать содержимого этой памяти."
Вот это "тем не менее" сбивает столку и ничего мне не объясняет...
Почему массив
f не может быть
определен, если элемент i[3] константа и определена во время компиляции? Компилятор не может сгенерить код, рассчитывающий смещение до элемента и узнать его константное значение? Но с другой стороны, конструкция
extern const int i = 5;
float f[i];
будет прекрасно работать, несмотря на то, что компилятор выделяет ячейку памяти под значение.