Почему мы должны помечать функции как constexpr?

C ++ 11 разрешает функции, объявленные сconstexpr спецификатор для использования в константных выражениях, таких как аргументы шаблона. Существуют строгие требования к тому, что разрешеноconstexpr; по сути, такая функция содержит только одно подвыражение и ничего больше. (Изменить: это ослаблено в C ++ 14, но вопрос стоит.)

Зачем вообще нужно ключевое слово?Что получается?

Это помогает раскрыть намерения интерфейса, но этоне подтвердите это намерение, гарантируя, что функция может использоваться в константных выражениях. После написанияconstexpr Функцию, программист должен еще:

Напишите контрольный пример или иным образом убедитесь, что он действительно используется в константном выражении.Документируйте, какие значения параметров допустимы в контексте константного выражения.

В отличие от раскрытия намерений, украшения функций сconstexpr может добавить ложное чувство безопасности, поскольку касательные синтаксические ограничения проверяются, игнорируя центральное семантическое ограничение.

Короче говоря: Будет ли какой-либо нежелательный эффект на язык, еслиconstexpr в объявлениях функций были просто необязательны? Или это может повлиять на любую действующую программу?

Ответы на вопрос(4)

Ваш ответ на вопрос