Запитання з тегом «constexpr»

constexpr - це модифікатор, введений в C ++ 11, який інформує компілятор про те, що значення функції чи змінної відоме або може бути обчислене під час компіляції. Як такий, його можна використовувати як константу в місцях, де інакше не могло бути.

1
Чи є різниця двох екземплярів constexpr __func__ покажчиків досі constexpr?
Чи дійсно це C ++? int main() { constexpr auto sz = __func__ - __func__; return sz; } GCC та MSVC вважають, що це нормально, Кланг вважає, що це не так: Compiler Explorer . Усі компілятори погоджуються, що це нормально: Провідник компілятора . int main() { constexpr auto p = …

2
Як можна швидко оцінити expr exst
Я випробував вирази const, які оцінюються під час компіляції. Але я грав із прикладом, який здається неймовірно швидким, коли виконується під час компіляції. #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; Кланг приймає це, але GCC та MSVC відкидають це. Помилка GCC: main.cpp:15:18: error: 'constexpr …

1
Чи може проміжок бути constexpr?
Усі конструктори std :: span оголошені constexpr, однак я не можу змусити жодного з них працювати в контексті constexpr. Якщо коментувати будь-який з contexpr нижче, це призведе до помилки компіляції. #include <array> #include <span> int main() { constexpr int carray[3] = { 0, 1, 2 }; constexpr std::array<int, 3> array{ …
11 c++  constexpr  c++20 

1
GCC не повідомляє про неправильно сформований лямбда-виклик constexpr
Нижче наведено два тестові випадки для невизначеної поведінки, виражених як IIFE (негайно називається лямбда-Axpression): 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.