以前,标准中的一些规则说它们适用于表达式,我很困惑这些规则是否也可以任意适用于全表达式。我得到了那个问题的答案。但是,标准中有“初始化的完整表达式必须是常量表达式”这样的规则。如:
dcl.constexpr#9
basic.start.static#2
他们都说完整表达式必须是上面这些链接中的常量表达式。
常量表达式的先决条件是它必须是一个核心常量表达式,它首先是一个表达式。我们知道expr.const#2中的这些规则适用于表达式,而不是不是表达式的完整表达式。
表达式 e是核心常量表达式,除非按照抽象机的规则对 e的求值将求值以下表达式之一:
然而init-declarator
,形式declarator initializer(opt)
不是表达。那么如何解释一个完整的初始化表达式是一个常量表达式呢?或者,标准中的句子意味着完整表达式中的这些表达式都必须是常量表达式?