Выбор ответа Senior Современный C++20/23 обновлено

consteval и constexpr

Вопрос

Чем consteval функция отличается от constexpr функции?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: consteval обязана вычисляться при компиляции, constexpr нет. constexpr функция может быть вызвана при компиляции, если аргументы константны, иначе работает как обычная. consteval (C++20) гарантирует вычисление при компиляции: вызов с неконстантными аргументами это ошибка.

Варианты ответа

  1. consteval работает только с целыми числами и указателями
  2. consteval обязана вычисляться при компиляции, constexpr нетправильный ответ
  3. Ничем: это синонимы, consteval просто короче писать
  4. consteval вычисляется только в рантайме, но без побочных эффектов

Разбор

constexpr функция может быть вызвана при компиляции, если аргументы константны, иначе работает как обычная. consteval (C++20) гарантирует вычисление при компиляции: вызов с неконстантными аргументами это ошибка. Полезно для проверок форматных строк (так устроен std::format) и генерации таблиц.

  • Ограничения на типы те же, что у constexpr.
  • Не синонимы.
  • Как раз наоборот.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.