Почему постоянные переменные иногда не рассматриваются как постоянные времени компиляции
Я пытался выполнить два разных сценария:
Сценарий 1:
const auto arraySize = 10; // fine, arraySize is constant
std::array<int, arraySize> data;
Здесь arraySize обрабатывается как постоянная времени компиляции и, следовательно, она была разрешена в std:: array.
Сценарий 2:
int sz=10;
const auto arraySize = sz; // fine .
std::array<int, arraySize> data; //error , arraySize is not compile time constant .
В сценарии 2 arraySize не обрабатывается как постоянная времени компиляции, несмотря на то, что arrySize является постоянной копией sz.
Почему эти два сценария трактуются по-разному?
2 ответа
Потому что это может быть как
int sz = 0;
std::cin >> sz;
const auto arraySize = sz;
а здесь ценность sz
определяется во время выполнения. Ты можешь использовать constexpr
, вместо const
, чем будет ошибка компиляции при такой инициализации.
Вы, вероятно, должны рассмотреть возможность использования constexpr
,
int sz=10;
переменная, установленная на некоторую константу. Компилятор может быть достаточно умным (или нет!), Чтобы постоянно распространять его при оптимизации.