C++ 如何理解这个句子;完整表达式必须是常量表达式;标准中提到的

C++ 如何理解这个句子;完整表达式必须是常量表达式;标准中提到的,c++,c++17,language-lawyer,constant-expression,full-expression,C++,C++17,Language Lawyer,Constant Expression,Full Expression,以前,标准中的一些规则说它们应用于表达式,我对这些规则是否也可以任意应用于完整表达式感到困惑。我得到了一个答案。但是,标准中有一些规则,如“初始化的完整表达式应为常量表达式”。例如: 他们都说,完整表达式必须是上述链接中的常量表达式。 常量表达式的先决条件是它必须是一个核心常量表达式,它首先是一个表达式。我们知道中的这些规则适用于表达式,而不是完整表达式,后者不是表达式 表达式e是一个核心常量表达式,除非按照抽象机器的规则对e求值,将求值下列表达式之一: 但是,init声明器的形式是声明器初

以前,标准中的一些规则说它们应用于表达式,我对这些规则是否也可以任意应用于完整表达式感到困惑。我得到了一个答案。但是,标准中有一些规则,如“初始化的完整表达式应为常量表达式”。例如:

他们都说,完整表达式必须是上述链接中的常量表达式。
常量表达式的先决条件是它必须是一个核心常量表达式,它首先是一个表达式。我们知道中的这些规则适用于表达式,而不是完整表达式,后者不是表达式

表达式e是一个核心常量表达式,除非按照抽象机器的规则对e求值,将求值下列表达式之一


但是,
init声明器
的形式是声明器初始值设定项(opt)不是一个表达式。那么如何解释初始化的完整表达式是一个常量表达式?或者,标准中的句子意味着完整表达式中的这些表达式都必须是常量表达式

再一次你好。一个完整的表达式就是一个表达式。这里再次定义了一个非常重要的概念:这里不必要的“full”形容词肯定是为了坚持任何可能隐式参与初始化的转换函数也是初始化的一部分。标准已经坚持了这一点:。也许有一些误解,他们决定不让窗口打开来解释。你真的不应该在意标准中多余的形容词,有时是整句话。有些段落看起来像诗,其他段落过于简洁,判断取决于读者。@Oliv完整表达式的一部分不是完整表达式,例如执行初始化。一些适用于表达式的规则不能任意应用于完整表达式,否则,您如何解释这些注释,当涉及求值时,完整表达式就是表达式,否则,完整表达式不是语法规则,因此expr.const中的所有内容都适用于完整表达式。@Oliv init声明符是完整表达式而不是表达式,因此您的注释“完整表达式是表达式”显然是错误的