Описание тега 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 <&…
18 окт '19 в 17:35
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) компилиру…
11 авг '20 в 22:15
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