可能的重复:
为什么在这种情况下不调用复制构造函数?
考虑下面的示例程序:
#include <iostream>
using namespace std;
class sample
{
private:
int x;
public:
sample(int a=0) : x(a)
{
cout << "default ctor invoked\n";
}
sample(const sample& obj)
{
cout << "copy ctor invoked\n";
}
};
int main()
{
sample s2 = sample(20); //Line1
sample s3 = 20; //Line2
return 0;
}
In Line1
,首先是构造函数sample
类被调用explicitly
参数为 20。然后我期望调用复制构造函数来初始化 s2。
在 Line2 中,首先是构造函数sample
类被调用implicitly
首先是参数 20。这里我也希望调用复制构造函数来初始化 s2。
在这两种情况下,复制构造函数都没有被调用?为什么会发生这种情况?我相信,我对复制构造函数调用的理解有问题。有人可以纠正我哪里出错了吗?
这是预料之中的。它被称为复制省略.
您的期望是正确的,但他们在 C++ 中做了一个例外(为了性能),这允许编译器将您的表达式视为一个实例的直接初始化,同时绕过复制构造函数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)