[英]Using constexpr when a value is non-const but initialized with a constant expression?
[英]is stateless non-const value usable in a constant expression?
stackexchange頁面:
https://softwareengineering.stackexchange.com/questions/386602/any-need-for-constexpr-in-tag-values
包含以下語句:
如果命名空間級變量和靜態類變量本身是constexpr,則只能在constexpr上下文中使用,但例外是完全為空的類和結構。
IIUC表示以下“ stateless-are-constexpr”語句:
在常量表達式中可以使用完全為空(即無狀態)類型的非常量變量。
但是,即使經過認真研究:
7.7常數表達式[expr.const]
從:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/n4800.pdf
我在7.7節中看不到任何地方可以表達或暗示上述“ stateless-are-constexpr”語句的內容。 它提到了文字值,但沒有提到非常量無狀態值。
有人可以解釋一下如何從n4800的7.7節或其他任何節中推斷出上述陳述嗎?
請注意,我可以從邏輯上從無狀態變量只能具有一個值這一事實來推斷自己,正如文字1只能具有一個值一樣,但是我不能在n4800的7.7節中沒有任何幫助地推斷出這一點。
更具體地說,使用stackexchange頁面上的代碼,n4800怎么說:
struct A {};
A a_global;
constexpr auto a_cexpr = a_global;
會編譯嗎? 此外,上述代碼的可編譯性是否表明a_global在常量表達式中可用? 如果沒有,什么是正確的方式顯示呢?
注意,我曾經使用過2個編譯器來編譯它,但是我想保證它們是正確的。
TIA。
您可以constexpr
非constexpr
數據的引用傳遞給constexpr
函數。 如果您從不使用參考,則沒有問題。
struct A{
int x=7;
A()=default;
A(int in):x(in){}
constexpr A(A const&) {};
};
A a=rand();
constexpr auto b = a;
int main(){}
您的空類型僅使副本ctor constexpr而從不讀取任何內容。 復制ctor不復制任何內容,因此不在乎其輸入是什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.