Что такое 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