临时函数参数何时消亡?
在 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中文网其他相关文章!