Что такое Conteval?

По-видимому, consteval будет ключевым словом в C++20. Страница cppreference для него в настоящее время пуста. Что это будет и как это связано с constexpr?

1 ответ

Решение

Он объявляет непосредственные функции, то есть функции, которые должны быть оценены во время компиляции для создания константы. (Раньше было написано constexpr! в предыдущей редакции статьи.) constexpr Функции могут быть оценены во время компиляции или во время выполнения, и не обязательно производить константу во всех случаях.

Принятым документом является P1073R3, который еще не является общедоступным, но предыдущая версия доступна, и вводная часть (описание мотивации и высокоуровневого описания) примерно такая же (за исключением того, что раздел "Исходные местоположения" удален в R3).

@geza Да, вы можете перегрузить в зависимости от конфигурации! Рассмотрим этот класс:

struct MyCompileTimeInt {
  consteval MyCompileTimeInt(int v) : value(v) {}
  const int value;
};

У него есть только конструктор consteval, поэтому он может быть построен только из значения, известного во время компиляции. Если я перегружу функцию с помощью этого класса, я могу получить перегрузку, которая будет учитываться только в том случае, если переданное целое число является константой. См. Пример на https://godbolt.org/z/_drqwB

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