为了账号安全,请及时绑定邮箱和手机立即绑定

C+:暂时性争论的寿命?

C+:暂时性争论的寿命?

C++
慕斯709654 2019-07-09 14:29:23
C+:暂时性争论的寿命?在创建MyClass作为像这样的函数的参数:class MyClass{   MyClass(int a);};    myFunction(MyClass(42));标准是否规定任何受赠方在销毁的时间上?具体而言,我是否可以假设在调用myFunction() ?
查看完整描述

3 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

临时对象在完整表达式的末尾被销毁,它们是其一部分。

完整表达式是指不是其他表达式的子表达式的表达式。通常这意味着它以;(或)ifwhileswitch(等等)表示声明的结尾。在您的示例中,它是函数调用的结尾。

请注意,您可以通过将临时人员绑定到const推荐信。这样做可以将它们的生存期延长到引用的生存期:

MyClass getMyClass();{
  const MyClass& r = getMyClass(); // full expression ends here
  ...} // object returned by getMyClass() is destroyed here

如果您不打算更改返回的对象,那么这是保存副本调用构造函数的一个很好的技巧(与MyClass obj = getMyClass();),如果没有应用返回值优化。不幸的是,它不是很出名。(我认为C+11的Move语义会使它变得不那么有用。)


查看完整回答
反对 回复 2019-07-09
?
九州编程

TA贡献1785条经验 获得超4个赞

该标准确实提供了保证-第12.2/5节:

函数调用(5.2.2)中的引用参数的临时绑定一直保持到包含调用的完整表达式完成为止

但是,在您的代码中,不清楚参数是通过引用还是通过值传递的,不过在某些时候,将使用引用的复制构造函数。


查看完整回答
反对 回复 2019-07-09
  • 3 回答
  • 0 关注
  • 426 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信