Вопросы с тегом «constexpr»

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

1
Является ли разница между двумя экземплярами constexpr указателей __func__ все еще constexpr?
Это действительный C ++? int main() { constexpr auto sz = __func__ - __func__; return sz; } GCC и MSVC считают, что все в порядке, Clang считает, что это не так: Compiler Explorer . Все компиляторы соглашаются, что с этим все в порядке: Compiler Explorer . int main() { constexpr …

2
Как можно быстро вычислить const expr
Я пробовал константные выражения, которые оцениваются во время компиляции. Но я играл с примером, который кажется невероятно быстрым при исполнении во время компиляции. #include<iostream> constexpr long int fib(int n) { return (n <= 1)? n : fib(n-1) + fib(n-2); } int main () { long int res = fib(45); std::cout …
13 c++  const  constexpr 

1
Законно ли инициализировать массив в конструкторе constexpr?
Является ли следующий код законным? template <int N> class foo { public: constexpr foo() { for (int i = 0; i < N; ++i) { v_[i] = i; } } private: int v_[N]; }; constexpr foo<5> bar; Clang принимает это, но GCC и MSVC отклоняют это. Ошибка GCC: main.cpp:15:18: error: …

1
Может ли span быть constexpr?
Все конструкторы std :: span объявлены constexpr, однако я не могу заставить их работать в контексте constexpr. Раскомментирование любого из constexpr ниже приведет к ошибке компиляции. #include <array> #include <span> int main() { constexpr int carray[3] = { 0, 1, 2 }; constexpr std::array<int, 3> array{ 0, 1, 2 }; …
11 c++  constexpr  c++20 

1
GCC не может сообщить о неправильно сформированном лямбда-вызове constexpr
Ниже приведены два тестовых примера для неопределенного поведения, выраженного как IIFE (немедленное название лямбда-экспрессии): constexpr auto test3 = []{ int* p{}; { int x{}; p = &x; } return *p; // Undefined Behaviour }(); // IIFE constexpr auto test4 = []{ int x = std::numeric_limits<int>::min(); int y = -x; // …
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.