不是完整表达式的语句

Statement that isn't a full-expression

经常听说在 C++ 中,临时对象在 完整表达式 的末尾被解构。 full-expression 被定义为不是某个其他表达式的子表达式的表达式。对我来说,这听起来与 声明 的概念非常相似。

所以我的问题是:如果我在 完整表达式 后附加一个分号,它是否总是 语句 ?是否可以通过在末尾取一些带有分号的 语句 并删除该分号来得到每个 完整表达式 ?我可以假设每个临时文件都将一直存在到其 语句 结束吗?

这是一个比包含的临时文件的生命周期更长的语句:

if (T() == T())
  foo();

条件中的表达式创建的两个临时对象在完整表达式的末尾被销毁,并且在语句 (foo();) 执行。

请注意,对于任何表达式 ee; 是一个语句(即 表达式语句 ,参见 [stmt.expr]).