C++ 复制省略
复制省略被定义为一种用于避免不必要的对象复制的优化技术。一般来说,所有编译器都会使用复制省略技术。该优化技术对于绑定到引用的临时对象不可用。
它也被称为复制省略。
让我们通过一个示例来理解复制省略的需求。
代码:
#include
using namespace std;
class A
{
public:
A(const char* str = "\0") //default constructor
{
cout << " Default Constructor called" << endl;
}
A(const A &a) //copy constructor
{
cout << "Copy constructor called" << endl;
}
};
int main()
{
A a1 = "copy me"; // Create object of class A
return 0;
}
输出
Default Constructor called
观察
程序输出的是默认构造函数。 这是因为当我们创建对象a1时,将一个参数构造函数转换为复制me到一个临时对象,并将该临时对象复制给对象a1。
这就是语句的方式 –
A a1 = “copy me”
转换为
A a1(“copy me”)
如何避免不必要的开销
许多编译器避免了这种开销问题。
现代编译器将复制初始化语句
A a1 = “copy me”
转换为,
直接初始化语句。
A a1(“copy me”)
进而调用复制构造函数。