consteval vs constexpr для переменных

Есть ли разница между constexpr и consteval?

 consteval int x1 = 2;
 constexpr int x2 = 5;

Что лучше использовать constexpr, чем consteval?

1 ответ

Стандарт фактически говорит:

Спецификатор consteval должен применяться только к объявлению функции или шаблона функции.

Итак, ваш первый пример не должен компилироваться.


Однако вы можете поставить consteval или же constexpr по функциям:

constexpr int foo (int x) { return x; }
consteval int bar (int x) { return x; }

constexpr когда применяется к функции, является просто рекомендательным - он говорит компилятору, оцените этот вызов функции во время компиляции, если можете.

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

Живая демонстрация

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