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