Выбор ответа Senior Современный C++20/23 обновлено
consteval и constexpr
Вопрос
Чем consteval функция отличается от constexpr функции?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: consteval обязана вычисляться при компиляции, constexpr нет. constexpr функция может быть вызвана при компиляции, если аргументы константны, иначе работает как обычная. consteval (C++20) гарантирует вычисление при компиляции: вызов с неконстантными аргументами это ошибка.
Варианты ответа
constevalработает только с целыми числами и указателямиconstevalобязана вычисляться при компиляции,constexprнетправильный ответ- Ничем: это синонимы,
constevalпросто короче писать constevalвычисляется только в рантайме, но без побочных эффектов
Разбор
constexpr функция может быть вызвана при компиляции, если аргументы константны, иначе работает как обычная. consteval (C++20) гарантирует вычисление при компиляции: вызов с неконстантными аргументами это ошибка. Полезно для проверок форматных строк (так устроен std::format) и генерации таблиц.
- Ограничения на типы те же, что у constexpr.
- Не синонимы.
- Как раз наоборот.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.