【发布时间】:2024-01-23 06:09:01
【问题描述】:
int c = 0;
考虑上面的代码,其中c = 0是一个init-declarator,也是一个表达式,因为这些规则:
初始化声明器:
声明初始化器(opt)一个完整的表达式是:
[...]
init-declarator 或 mem-initializer,包括初始化器的组成表达式,
只要是一个表达式,就会有一个值类别。
纯右值是一个表达式它的求值初始化一个对象或一个位域,或者计算一个运算符的操作数的值,由它出现的上下文指定。
a = 0的求值会初始化对象a。那么,全表达式c=0是prvalue表达式吗?如果我理解有误,请指正。
【问题讨论】:
-
成为一个完整的表达式并不意味着它是一个表达式,这很奇怪。
-
@eerorika 如果不考虑完整表达式,为什么标准中有
whose full-expression is a constant expression之类的东西?我们知道常量表达式的先验条件是必须的核心常量表达式 -
一些完整的表达式是表达式。不是全部。
-
如果这值得(从长远来看) - 请提出答案。对于像我这样的非理论家,跟随你的讨论让我一无所获。 :-)
-
@jackX 是的。适用于表达式的规则仅适用于表达式。如果某物不是表达式,则应用于表达式的规则不适用于它。有不是表达式的完整表达式。因此,有些规则适用于不适用于所有完整表达式的表达式。
标签: c++ c++17 language-lawyer