คำถามติดแท็ก constexpr

constexpr เป็นโมดิฟายเออร์ที่นำมาใช้ใน C ++ 11 ซึ่งแจ้งคอมไพเลอร์ว่าทราบค่าของฟังก์ชันหรือตัวแปรหรือสามารถคำนวณได้ในเวลาคอมไพล์ ด้วยเหตุนี้จึงสามารถใช้เป็นค่าคงที่ในสถานที่ที่เป็นอย่างอื่นไม่ได้

1
ความแตกต่างของอินสแตนซ์ constexpr สองตัวของตัวชี้ __func__ ยังคงเป็น constexpr หรือไม่
นี่คือ C ++ ที่ถูกต้องหรือไม่ int main() { constexpr auto sz = __func__ - __func__; return sz; } GCC และ MSVC คิดว่ามันตกลงดังกราวคิดว่ามันไม่ได้: คอมไพเลอร์ Explorer ที่ คอมไพเลอร์ทุกคนยอมรับว่าอันนี้ตกลง: คอมไพเลอร์ Explorer ที่ int main() { constexpr auto p = __func__; constexpr auto p2 = p; constexpr auto sz = p2 - p; return sz; …

2
const expr สามารถประเมินได้อย่างไรอย่างรวดเร็ว
ฉันได้ทดลองใช้นิพจน์ 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 << res; return 0; } เมื่อฉันเรียกใช้รหัสนี้ใช้เวลาประมาณ 7 วินาทีในการเรียกใช้ จนถึงตอนนี้ดีมาก แต่เมื่อฉันเปลี่ยนlong int res = fib(45)ไปconst long int res = fib(45)ก็จะใช้เวลาไม่ได้เป็นครั้งที่สอง …
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 foo<N>::foo() [with int N = …

1
span สามารถเป็น constexpr ได้หรือไม่
Constructor ของ 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 }; using S = std::span<const int, 3>; /*constexpr*/ S span1{ array.data(), 3 …
11 c++  constexpr  c++20 

1
GCC ล้มเหลวในการรายงานการโทรแลมบ์ดาแบบ constexpr ที่ไม่เหมาะสม
ด้านล่างเป็นสองกรณีทดสอบสำหรับพฤติกรรมที่ไม่ได้กำหนดซึ่งแสดงเป็น IIFE (เรียกว่า Lambda-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; // Undefined Behaviour return y; }(); int main() {} เมื่อรวบรวมกับ …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.