据说临时变量被破坏作为评估全表达式的最后一步,例如
bar( foo().c_str() );
临时指针一直存在,直到bar返回,但
是什么baz( bar( foo().c_str() ) );
它仍然存在直到bar返回,或者baz返回意味着完全表达结束在这里, 编译器我在baz返回后检查了destruct对象,但是我可以依赖它吗?
答案 0 :(得分:11)
临时生活直到它们被创建的完整表达结束。 “完整表达式”是不是另一个表达式的子表达式的表达式。
在baz(bar(...));
中,bar(...)
是baz(...)
的子表达式,而baz(...)
不是任何子表达式。因此,baz(...)
是完整表达式,在评估此表达式期间创建的所有临时值都不会在baz(...)
返回之后删除。
答案 1 :(得分:3)
顾名思义,full-expression是表达式的全部内容,包括对baz()
的调用,因此临时值将一直存在,直到调用baz()
为止。