Почему постоянные переменные иногда не рассматриваются как постоянные времени компиляции

Я пытался выполнить два разных сценария:

Сценарий 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; переменная, установленная на некоторую константу. Компилятор может быть достаточно умным (или нет!), Чтобы постоянно распространять его при оптимизации.

Другие вопросы по тегам