C++ primer中写道“复制初始化首先使用指定构造函数函数创建一个临时对象,然后用复制构造函数将那个临时对象复制到正在创建的对象”。实际在使用中,C++编译器会对复制构造函数函数的调用做了优化:
代码:
#include<iostream>
using namespace std;
class Demo{
public:
Demo(int a)
{
cout << "Demo构造函数" << endl;
}
Demo(const Demo&)
{
cout << "Demo复制构造函数" << endl;
}
private:
int a;
};
int main()
{
Demo de1 = Demo(3);
return 0;
}
VS2010调用的结果:
VC6调用的结果:
从以上可知道,VS2010对复制构造函数的调用做了优化。