全表达的边界和临时的生命

时间:2011-03-28 13:34:23

标签: c++ temporary lifetime full-expression

  

可能重复:
  C++: Life span of temporary arguments?

据说临时变量被破坏作为评估全表达式的最后一步,例如

bar( foo().c_str() );

临时指针一直存在,直到bar返回,但

是什么
baz( bar( foo().c_str() ) );

它仍然存在直到bar返回,或者baz返回意味着完全表达结束在这里, 编译器我在baz返回后检查了destruct对象,但是我可以依赖它吗?

2 个答案:

答案 0 :(得分:11)

临时生活直到它们被创建的完整表达结束。 “完整表达式”是不是另一个表达式的子表达式的表达式。

baz(bar(...));中,bar(...)baz(...)的子表达式,而baz(...)不是任何子表达式。因此,baz(...)是完整表达式,在评估此表达式期间创建的所有临时值都不会在baz(...)返回之后删除。

答案 1 :(得分:3)

顾名思义,full-expression是表达式的全部内容,包括对baz()的调用,因此临时值将一直存在,直到调用baz()为止。