[英]Can't initialize constexpr value from return value of constexpr function
我試圖了解constexpr
是如何工作的。 我正在從constexpr
function 的返回值初始化constexpr
變量,如下面的代碼所示。
#include <iostream>
using namespace std;
constexpr size_t n = 40;
constexpr size_t Fib(const size_t n) {
if (n <= 1) return n;
return Fib(n - 1) + Fib(n - 2);
}
int main()
{
//constexpr size_t Value = Fib(n); // ----> Line 1
const size_t Value = Fib(n); // ----> Line 2
cout << Value;
}
Line 1
,如果未注釋的抱怨說expression did not evaluate to a constant
。 但是Line 2
工作正常。 我在這里想念什么?
constexpr
告訴編譯器可以在編譯時解析,但不保證。
在Line 1
,編譯器嘗試在編譯時解析它。 但是輸入太大以至於編譯器無法解析它。 編譯器 output 講述了完整的故事。
# MSVC
> error C2131: expression did not evaluate to a constant
> message : failure was caused by evaluation exceeding step limit of 1048576 (/constexpr:steps<NUMBER>)
但是在Line 2
中,該值不需要在編譯時解析,編譯器可以讓 CPU 在運行時處理它。 這就是為什么Line 2
無需打嗝即可工作的原因。
為了進一步證明這一點,請嘗試將輸入值從 40 減少到 10 左右。編譯器將毫無問題地解決它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.