开发者

Full-expression boundaries and lifetime of temporaries [duplicate]

开发者 https://www.devze.com 2023-02-20 11:57 出处:网络
This question already has answers here: 开发者_开发知识库 Closed 11 years ago. Possible Duplicate:
This question already has answers here: 开发者_开发知识库 Closed 11 years ago.

Possible Duplicate:

C++: Life span of temporary arguments?

It is said that temporary variables are destroyed as the last step in evaluating the full-expression, e.g.

bar( foo().c_str() );

temporary pointer lives until bar returns, but what for the

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

is it still lives until bar returns, or baz return means full-expression end here, compilers I checked destruct objects after baz returns, but can I rely on that?


Temporaries live until the end of the full expression in which they are created. A "full expression" is an expression that's not a sub-expression of another expression.

In baz(bar(...));, bar(...) is a subexpression of baz(...), while baz(...) is not a subexpression of anything. Therefore, baz(...) is the full expression, and all temporaries created during the evaluation of this expression will not be deleted until after baz(...) returned.


As the name suggests, the full-expression is all of the expression, including the call to baz(), and so the temporary will live until the call to baz() returns.

0

精彩评论

暂无评论...
验证码 换一张
取 消