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


复制优化是大多数编译器实施的一种优化,可以防止在某些情况下出现额外的(可能很昂贵的)复制。因此,如果你有一些正在创建不使用的对象或没有副作用的代码,

示例

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 次浏览

开启你的职业生涯

完成课程获得认证

开始
广告