c++函数返回类型不是引用的时候为什么为产生一个临时变量?


Author: Kimmy

c++函数返回类型不是引用的时候为什么为产生一个临时变量?

知乎链接


TestClass func()
{
return TestClass(1);
}

第三行return之前会构造一次TestClass,但是当前构造的对象生命周期是在func范围内的,所以需要进行一次拷贝,成为func的返回值,然后退出func之前析构。

这样才是栈上对象正常的生命周期流程。

RVO只是对这个流程做了一步优化,把func栈上的对象构建过程放到了调用func的外层作用域罢了。

=================
为什么要有RVO,而不是直接返回,省去一步copy呢?
因为利用栈做自动资源管理(RAII)的话这样子更方便,只有RVO和NRVO才是一些特例。

创建时间:2015-09-28 最近更新时间:2023-11-03