什么是C++中的复制省略和返回值优化?


复制省略也称为复制遗漏。这是编译器优化技术之一。它避免了不必要的对象复制。几乎所有当前的编译器都使用这种复制省略技术。

我们通过一个示例代码来看它是如何工作的。

示例代码

#include <iostream>
using namespace std;
class MyClass {
   public:
   MyClass(const char* str = "\0") { //default constructor
      cout << "Constructor called" << endl;
   }
   MyClass(const MyClass &my_cls) { //copy constructor
      cout << "Copy constructor called" << endl;
   }
};
main() {
   MyClass ob = "copy class object";
}

输出

Constructor called

现在我们来讨论为什么不调用复制构造函数?

因此,当构造一个对象时,会生成一个临时对象并将其复制到实际对象。因此,我们可以说在内部它看起来是这样的。

MyClass ob = "copy class object";

将作为以下方式工作。

MyClass ob = MyClass("copy class object");

C++ 编译器避免了此类开销。

更新于:2019 年 7 月 30 日

231 次浏览

开启你的职业

通过完成课程获得认证

开始
广告
© . All rights reserved.