Вопросы по теме 'constexpr'

Как проверить, правильно ли оценивается constexpr
Я использовал constexpr для вычисления хэш-кодов во время компиляции. Код компилируется корректно, работает корректно. Но я не знаю, являются ли хэш-значения временем компиляции или временем выполнения. Если я трассирую код во время выполнения, я...
5684 просмотров
schedule 15.05.2024

Расширение компилятора для оценки сложной функции (с известными входными значениями) во время компиляции, вне досягаемости `constexpr`
Взгляните на этот пример . Попытка использовать constexpr для получения оценки времени компиляции будет крайне сложной, если не невозможной. Однако при вызове функции все аргументы известны во время компиляции. Теоретически (при наличии...
238 просмотров
schedule 04.07.2022

Как я могу выполнить утверждение во время выполнения в функции constexpr?
Насколько я понимаю, функция constexpr может выполняться как во время компиляции, так и во время выполнения, в зависимости от того, можно ли выполнить всю оценку во время компиляции или нет. Однако вы не можете перегрузить эту функцию, чтобы иметь...
2211 просмотров
schedule 06.10.2023

Как этот код может быть constexpr? (std :: chrono)
В стандарте P0092R1 Говард Хиннант написал: template <class To, class Rep, class Period, class = enable_if_t<detail::is_duration<To>{}>> constexpr To floor(const duration<Rep, Period>& d) { To t =...
1174 просмотров
schedule 25.10.2023

Заполнение массива во время компиляции
Я пытаюсь заполнить массив символов, используя другой массив символов constexpr во время компиляции, но я не понимаю, как это сделать. Я пытаюсь подражать следующему: constexpr char arr1[N] = {/* Permutation of the numbers 0..N-1 */} char...
59 просмотров

Условно constexpr функция-член
Предположим, у меня есть класс шаблона template <typename T> class foo { T m; decltype(auto) f() { return m.f(); } }; Как я могу дать foo:f() спецификатор constexpr, только если T::f() является constexpr?
1091 просмотров
schedule 11.01.2024

Инициализация c ++ std :: bitset во время компиляции
Я пытаюсь инициализировать std::bitset<256> во время компиляции с некоторыми из его индексов, скажем, 50-75 и 200-225, установленными на 1. На основе http://en.cppreference.com/w/cpp/utility/bitset/bitset Похоже, у меня 2 варианта:...
3271 просмотров
schedule 04.11.2023

отключить ветку с помощью if constexpr и SFINAE
Я хочу включать/отключать ветки во время компиляции в зависимости от того, можно ли вызывать функцию с определенными аргументами. Что должно быть в условии if constexpr ? Я могу получить тип результата через std::result_of(decltype(add)(A, B)) ,...
631 просмотров
schedule 24.12.2023

Почему gcc5.4 не компилирует функцию constexpr, вызывающую функцию, отличную от constexpr, а icpc делает это?
gcc5.4 не компилирует следующий код: // source.cpp int nonconstexprfunc() { return 14; } constexpr int func(int n) { if (n < 0) return nonconstexprfunc(); return n*n; } int main() { constexpr int t1 = func(0);...
364 просмотров
schedule 01.03.2024

Почему в Visual Studio нет версии constexpr std::isnan
В последнее время я играю со static_asserts. Во время одного из моих «экспериментов» я заметил, что std::isnan() не является функцией constexpr и поэтому не может оцениваться во время компиляции. (Visual Studio 2017) Теперь вопрос в том, есть...
104 просмотров
schedule 25.01.2024

Clang не оценивает значение функции constexpr для переменной, отличной от constexpr, во время компиляции.
Некоторый код: constexpr int sum(int a, int b) { return a + b; } int main() { int a = sum(4, 5); return 0; } Я компилирую этот код с clang-9 , но он не оценивает значение int a в основной функции во время компиляции. Если я...
332 просмотров
schedule 01.04.2024

Обработка битов C++ компилируется без ошибок в моей системе, но компиляторы godbolt выдают предупреждения/ошибки
Изменить: ссылка на Godbolt, например здесь ! Итак, у меня есть этот пример, чтобы показать макросы, которые я сделал, и их вариант использования: #include <bitset> #include <iostream> #define bit_mask(size, offset) (~(~0 <<...
98 просмотров
schedule 06.05.2024

Неразрешенный внешний символ с использованием статического члена constexpr
Я пытаюсь скомпилировать этот (C ++ 14) код с помощью VC ++ 2017. #include <type_traits> #include <limits> struct Templ { template <typename T> static constexpr int value = ( std::numeric_limits<T>::min() == 0...
177 просмотров

Константы constexpr внутри функции constexpr?
Предположим, у меня есть статическая функция, которая принимает перечисление и возвращает указатель cstring для отладки. Функция может быть constexpr, но не гарантируется, что ее всегда можно будет вычислить во время компиляции. Скажем, он работает...
63 просмотров
schedule 06.10.2022