“完整表达”与“完整表达”

时间:2019-05-20 13:01:01

标签: c++ language-lawyer full-expression

我在GitHub中查看this post,但我不明白OP的含义:

"full expression" suggest that it is a kind of expression, but sometimes it is not.

我的解释是,“完整表达”(标准中使用的术语)可能不是表达。 [intro.execution] / 5给出了完整表达的定义,如下所示:

  

完整表达
  (5.1)—未计算的操作数(8.2),
  (5.2)   —常量表达式(8.6),
  (5.3)—初始化声明符(子句   11)或mem初始化程序(15.6.2),包括   初始化程序的表达式,
  (5.4)—调用   在其他对象生命周期结束时生成的析构函数   比临时对象(15.2)或
  (5.5)-不等于的表达式   另一个表达式的子表达式,否则不属于该表达式   全表达式。

如果我的解释正确,那么我想知道上面哪个要点会产生不是表达式的完整表达式。否则,即,如果我错了,OP对他的评论意味着什么?

1 个答案:

答案 0 :(得分:1)

表达式的正式列表可以在[gram.expr]中找到。这是很多文本,所以我不在这里包括它,但是使用它我们可以看到 init-declarator mem-initializer 不是表达式语法。这意味着即使 init-declarator mem-initializer 被认为是完整表达式,但从语法上讲它们不是表达式。