首页 > 后端开发 > C++ > C 临时函数参数到底什么时候被销毁?

C 临时函数参数到底什么时候被销毁?

Susan Sarandon
发布: 2025-01-04 17:09:44
原创
241 人浏览过

When Exactly Do C   Temporary Function Arguments Get Destroyed?

临时函数参数何时消亡?

在 C 中,当创建临时对象作为函数的参数时,编译器会自动管理其生命周期。这就提出了一个问题:临时对象的析构函数在什么时候保证被调用?

根据 C 标准,临时对象在它们所属的完整表达式结束时被销毁。这里,完整表达式是不是另一个表达式的子表达式的表达式。它通常以控制流语句(例如 if、while、switch)的分号 (;) 或右括号 () 结尾。

在提供的示例中:

class MyClass
{
  MyClass(int a);
};

myFunction(MyClass(42));
登录后复制

作为函数参数创建的临时 MyClass 对象将在函数调用语句结束后(即遇到分号时)被销毁。因此,您可以假设在执行任何后续语句之前将调用析构函数。

值得注意的是,可以使用 const 引用来延长临时对象的生命周期。通过将临时引用绑定到 const 引用,其生命周期会延长以匹配引用的生命周期:

MyClass getMyClass();

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

此技术可以节省不必要的复制构造,同时保留函数返回的值,尤其是在返回值优化时不适用。然而,随着 C 11 中移动语义的出现,它的实用性有所减弱。

以上是C 临时函数参数到底什么时候被销毁?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板