声明不是一个完整的表达

时间:2017-02-28 20:04:41

标签: c++ expression raii temporary-objects

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

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

1 个答案:

答案 0 :(得分:3)

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

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

条件中的表达式创建的两个临时值在完整表达式的末尾被销毁,并且在语句({{1}时不再存在})执行。

请注意,对于任何表达式 foo(); e e是一个语句(即表达式语句< / em>,见[stmt.expr])。