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

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

在创建MyClass作为像这样的函数的参数:

class MyClass{
  MyClass(int a);};    myFunction(MyClass(42));

标准是否规定任何受赠方在销毁的时间上?
具体而言,我是否可以假设在调用myFunction() ?


慕斯709654
浏览 427回答 3
3回答

狐的传说

临时对象在完整表达式的末尾被销毁,它们是其一部分。完整表达式是指不是其他表达式的子表达式的表达式。通常这意味着它以;(或)为if, while, switch(等等)表示声明的结尾。在您的示例中,它是函数调用的结尾。请注意,您可以通过将临时人员绑定到const推荐信。这样做可以将它们的生存期延长到引用的生存期:MyClass getMyClass();{   const MyClass& r = getMyClass(); // full expression ends here   ...} // object returned by getMyClass() is destroyed here如果您不打算更改返回的对象,那么这是保存副本调用构造函数的一个很好的技巧(与MyClass obj = getMyClass();),如果没有应用返回值优化。不幸的是,它不是很出名。(我认为C+11的Move语义会使它变得不那么有用。)

九州编程

该标准确实提供了保证-第12.2/5节:函数调用(5.2.2)中的引用参数的临时绑定一直保持到包含调用的完整表达式完成为止但是,在您的代码中,不清楚参数是通过引用还是通过值传递的,不过在某些时候,将使用引用的复制构造函数。
打开App,查看更多内容
随时随地看视频慕课网APP