簡體   English   中英

無法從 constexpr function 的返回值初始化 constexpr 值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM