临时体的完整表达边界和寿命

发布于 2024-10-27 11:05:58 字数 494 浏览 1 评论 0原文

可能的重复:
临时函数参数的生命周期是多少?
临时对象何时销毁?

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

bar( foo().c_str() );

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

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

它仍然存在直到 bar 返回,或者 baz return 意味着完整表达式结束,这是为了什么, 我检查了编译器在 baz 返回后析构对象,但我可以依赖它吗?

Possible Duplicate:
What is the lifetime of temporary function arguments?
When are temporary objects destroyed?

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

冷清清 2024-11-03 11:05:58

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

baz(bar(...)); 中,bar(...)baz(...) 的子表达式, while baz(...) 不是任何内容的子表达式。因此,baz(...) 是完整表达式,并且在 baz(...) 返回之前,在此表达式求值期间创建的所有临时变量都不会被删除。

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.

情话已封尘 2024-11-03 11:05:58

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

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文