什么是复制消除和返回值优化?


复制消除是大多数编译器实现的一种优化,用于在某些情况下防止额外的(潜在的昂贵)复制。因此,如果您有一些创建对象不会被使用或没有副作用的代码,

例子

struct MyStruct {
   MyStruct() {}
   MyStruct(const MyStruct&) {
      std::cout << "Copied.\n";
   }
};
MyStruct f() {
    return MyStruct();
}
int main() {
   std::cout << "Main\n";
   MyStruct obj = f();
}

输出

您可以根据编译器和设置获得以下任何输出−

Main

Main
Copied
Copied

Main
Copied

这意味着创建的对象少于您的预期,因此您也不能依赖于调用某个特定数量的构造函数和析构函数。您不应该在复制/移动构造函数或析构函数中使用关键逻辑,因为您不能依赖于它们被调用。

更新于:2020 年 2 月 11 日

362 次浏览

启动您的职业

完成课程即可获得认证

开始
广告