constexpr спецификатор должен использоваться для значений, которые могут быть определены во время компиляции.
constexpr спецификатор должен использоваться для значений, которые могут быть определены во время компиляции.
Если значение переменных вычисляется из выражения, которое включает константы времени компиляции только, с помощью constexpr
перед определением переменной, как это:
constexpr double eValSquared = 2.718*2.718;
Если выражение не может быть выполнено во время компиляции, constexpr
ключевое слово гарантирует, что вы получаете ошибку компиляции. Можно затем устранить базовую проблему, если это возможно.
Обратите внимание на то, что const
ключевое слово не гарантирует оценку времени компиляции. const
ключевое слово просто запрещает прямую модификацию значения переменных после инициализации. В зависимости от того, как инициализируется переменная, инициализация может произойти во время компиляции или время выполнения.
Средство проверки отмечает определение локальной переменной без constexpr
спецификатор, если переменная инициализируется одним из следующих и не изменяется впоследствии в коде:
Постоянное время компиляции, например, литеральное значение.
Выражение, включающее константы времени компиляции только.
Вызовы функции с константами времени компиляции как параметры, если функцией является самостоятельно constexpr
или функция содержит только оператор возврата, включающий его параметры.
Вызов конструктора с постоянным временем компиляции, обеспечил, всеми функциями членства класса включая конструктора является самостоятельно constexpr
.
Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.
Группа: объявление |
Категория: необходимый, автоматизированный |