[英]C++ integral constant expression definition
在當前的C ++標准中,有以下段落( expr.const#5 )(強調我的):
整數常量表達式是整數或未整數枚舉類型的表達式, 隱式轉換為prvalue ,其中轉換后的表達式是核心常量表達式。 [注意:這些表達式可以用作位字段長度,如果底層類型不固定([dcl.enum]),則可以用作枚舉器初始值設定項,也可以用作對齊方式。 - 結束說明]
關於這個定義,我有兩個問題:
短語“隱式轉換為prvalue”是否意味着對於表達式被視為“整數常量表達式”,它必須出現在強制它被隱式轉換為prvalue的上下文中?
“轉換后的表達”是指什么? 我知道這個問題是在轉換常量表達式定義的澄清中解決的。 給出的答案是“轉換后的表達式”在下面的初始化之后是t
: T t = expr;
。 但是,我沒有看到如何評估表達式( t
)是否與[expr.const#4]中給出的任何規則相匹配(描述表達式被視為核心常量表達式的必要條件的段落),這將使其不合格是一個核心的常數表達 。
謝謝。
我查看了clang的源代碼,特別是在“SemaOverload.cpp”中的“ CheckConvertedConstantExpression ”函數中。 在那里進行的操作如下:
f()
,它是類型A
,用戶定義的轉換函數為int,並且上下文需要一個int
,那么new表達式應該是f().operator int()
) constant expression
) 所以我相信,正如@Davis Herring的回答所述,術語“轉換表達”是指一種新的表達方式,其評估包括對程序中所寫的原始表達式的評估以及對任何所需轉換的評估。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.