簡體   English   中英

constexpr 變量不是編譯時值嗎?

[英]Constexpr variable is not a compile time value?

根據https://docs.microsoft.com/en-us/cpp/cpp/constexpr-cpp?view=vs-2019

“constexpr 表示值或返回值是常量,如果可能,在編譯時計算。”

此外, constexpr 和 static constexpr 全局變量之間的區別

“在變量聲明中,constexpr 表示 const,並且命名空間 scope 中的 const 變量默認具有內部鏈接(因此添加 static 不會改變任何內容)。”

我認為這意味着constexpr意味着const意味着static

但是,這個問題的答案讓我感到困惑: 您何時以及為什么將 static 與 constexpr 一起使用?

它指出

  1. “constexpr 變量不是編譯時值”
  2. “看起來,在某些極端情況下,我們可以從 static constexpr 變量的 static 存儲持續時間中受益。”

我有什么誤解?

您缺少的是使用嚴格的 C++ 術語的地方和不使用的地方。

constexpr變量不是編譯時值,因為它不是 value 變量是 object 或對 object 的引用。 對象可能包含值,但對象不是值。 42 是一個值。 int i = 42; 創建一個名為i且類型為int的 object,並將值 42 分配給該 object。

Microsoft 文檔使用白話語言,而不是嚴格的 C++ 術語。

一個constexpr變量定義了一個不可變 ( const ) object ,其初始化程序應為常量表達式,因此變量本身可用於需要常量表達式的地方。


我認為這意味着constexpr意味着const意味着static

請記住static是 C++ 中的一個極度重載的關鍵字,在不同的上下文中具有非常不同的含義。 您引用的答案是響應static的非常具體的用法:用於命名空間范圍的變量。 在這種情況下, static是不必要的,因為constexpr命名空間范圍的變量默認為內部鏈接。

但是您引用的另一個答案是談論static其他用途,特別是功能static 因此,將該語句歸結為“ const意味着static ”過於簡化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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