12

可能重复:
C++:临时参数的寿命?

据说临时变量在评估完整表达式的最后一步被销毁,例如

bar( foo().c_str() );

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

baz( bar( foo().c_str() ) );

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

4

2 回答 2

16

临时对象一直存在到创建它们的完整表达式结束。“完整表达式”是不是另一个表达式的子表达式的表达式。

In baz(bar(...));,bar(...)是 的子表达式baz(...),而baz(...)不是任何事物的子表达式。因此,是完整的表达式,并且在计算此表达式期间创建的所有临时对象在返回baz(...)之前不会被删除。baz(...)

于 2011-05-19T13:08:26.197 回答
3

顾名思义,完整表达式是所有表达式,包括对 的调用baz(),因此临时表达式将一直存在,直到调用baz()返回为止。

于 2011-03-28T13:38:18.057 回答