Описание тега consteval

NoneConsteval - это модификатор, введенный в C++20, который сообщает компилятору, что функция выполняется немедленно - ее можно вычислить только во время компиляции. Он похож на модификатор constexpr, но он не только позволяет, но и обеспечивает оценку времени компиляции.
1 ответ

Что такое Conteval?

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

Позволит ли consteval использовать static_assert для аргументов функции?

В настоящее время вы не можете использовать static_assert проверить параметры constexpr функция, даже если все вызовы к ней действительно constexpr, Это имеет смысл, потому что компилятор все еще должен создать экземпляр этой функции без constexpr в…
26 июл '19 в 23:45
0 ответов

оценка constexpr внутри скобок шаблона

Почему следующая инъекция constexpr встроен в шаблон не работает #include <iostream> #include <type_traits> template<typename E> static constexpr auto enumToInt(E e) -> typename std::underlying_type<E>::type { return stati…
31 дек '19 в 16:07
3 ответа

Могут ли констевальные функции из разных единиц перевода мешать?

Я пытаюсь вникнуть в последствия того, что функция inlineи наткнулся на этот вопрос. Рассмотрим эту небольшую программу (демонстрацию): /* ---------- main.cpp ---------- */ void other(); constexpr int get() { return 3; } int main() { std::cout <&…
2 ответа

Разрешено ли компилятору вызывать немедленную (составную) функцию во время выполнения?

Это может быть глупый вопрос, но я сбит с толку. Было ощущение, что сразу (consteval) Функция имеет быть выполнена во время компиляции, и мы просто не можем увидеть его тело в двоичном виде. Эта статья явно подтверждает мое мнение: Это подразумевает…
19 окт '19 в 20:28
1 ответ

Почему функция consteval допускает неопределенное поведение?

В C++ есть очень интересное свойство константных выражений: их оценка не может иметь неопределенного поведения (7.7.4.7): Выражение e является основным постоянным выражением, если только оценка e, следуя правилам абстрактной машины ([intro.execution…
18 окт '19 в 19:14
0 ответов

Как перенос вычислений из времени выполнения во время компиляции замедлил мой код?

Я пишу функцию для вычисления быстрого преобразования Фурье с использованием алгоритма Стокхэма БПФ и обнаружил, что все "факторы поворота" для вычисления могут быть предварительно рассчитаны во время компиляции, если длина БПФ равна степени двойки.…
16 фев '20 в 22:57
1 ответ

Почему немедленные функции не имеют значения noexcept по умолчанию и почему им разрешено быть noexcept(false)?

Начиная с C++20, мы можем определять немедленные функции, используя constevalспецификатор. Когда функция объявленаconstevalкаждый вызов этой функции должен производить константу времени компиляции, иначе программа будет некорректной. Кроме того, пос…
23 май '20 в 17:52
2 ответа

consteval wrapper против source_location

Я попробовал следующий код, используя GCC10 в режиме C++20: consteval std::experimental::source_location there() { return std::experimental::source_location::current(); // Line 3 } void f(const std::experimental::source_location& a = there()) //…
29 июн '20 в 01:37
1 ответ

Есть ли способ получить доступ к произвольным данным известного размера в виде массива символов в контексте constexpr/consteval?

Я пытаюсь реализовать что-то, что будет принимать произвольные биты данных (которые известны во время компиляции) и вычислять их CRC как consteval, поэтому я могу использовать его, например, для индексации таких данных с помощью целочисленных ключей…
01 авг '20 в 09:35
1 ответ

clang говорит, что вызов функции void consteval не является постоянным выражением

Clang (trunk) выдает ошибку для следующего кода: consteval void f() {} int main() { f(); // error: call to consteval function 'f' is not a constant expression // note: subobject of type 'void' is not initialized } в то время как gcc(trunk) компилиру…
1 ответ

Почему функции constexpr не могут использовать функции consteval, в то время как вы можете создавать объекты constexpr из функций consteval?

У вас могут быть объекты constexpr перед consteval, но вы не можете использовать consteval внутри constexpr. Почему? Я думал, что consteval должен быть своего рода "узким" constexpr. Пожалуйста, помогите мне разобраться в этом дизайне. constexpr int…
13 авг '20 в 13:36
0 ответов

Когда использовать constinit и consteval?

Использование constexpr довольно просто, чтобы убедиться, что код может быть оценен во время самой компиляции. Но последние функции C++ 20, которые обеспечивают constinit а также constevalнемного сбивают с толку. Может ли кто-нибудь предоставить пра…
05 июл '20 в 11:11
1 ответ

Являются ли ʻinline` и `noexcept` избыточными в контексте consteval?

Я работаю с кодом, в котором constexpr используются функции, которые я в настоящее время рефакторую consteval когда возможно. inline constexpr auto example() noexcept { /*...*/ } Насколько я понимаю,inline ключевое слово выше уже является избыточным…
27 фев '20 в 18:14
1 ответ

Имя для описания аргумента функции consteval, известного во время компиляции, но не constexpr

Аргумент consteval функция: вроде как известно во время компиляции но это не constexpr Мотивация такого поведения объясняется Эндрю Саттоном в его статье " Перевод и оценка: ментальная модель для метапрограммирования во время компиляции", как указан…
13 май '20 в 17:22
1 ответ

Как consteval влияет на оценку аргументов по умолчанию?

В приведенном ниже коде, если here() перестает быть consteval (либо полное RT, либо constexpr), тогда line() это линия призыва f() внутри main(). Но сconsteval это определение f(). Откуда это несоответствие? #include <experimental/source_location…
29 июн '20 в 15:46
0 ответов

Отладка во время компиляции в C++

Согласно максиме constexpr everything и с введением consteval в C++20 все больше и больше кода оценивается во время компиляции. Это приводит к очевидному вопросу: как это отладить? Единственные подсказки в настоящее время - это ошибки компилятора. Н…
16 авг '20 в 14:12
1 ответ

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

Есть ли разница между constexpr и consteval? consteval int x1 = 2; constexpr int x2 = 5; Что лучше использовать constexpr, чем consteval?
16 окт '20 в 22:55
1 ответ

decltype(fun()) для методов consteval

Рассмотрим следующий код. Я могу скомпилировать его с помощью GCC 10.2.0 и Clang 11.0.0 (как и ожидалось): #include <iostream> template<int> struct T { static constexpr auto fun() noexcept { return 0; } using type = std::remove_cvref_t&l…
10 ноя '20 в 06:05
1 ответ

Каковы преимущества использования consteval вместо функции constexpr?

Я знаю разницу в требованиях, меня больше всего интересует, какие преимущества дает качество кода. Я могу вспомнить несколько вещей: читатель может просто прочитать сигнатуру функции и знать, что функция оценивается во время компиляции компилятор мо…
08 ноя '20 в 21:24