use*_*712 -1 c++ constructor copy-constructor default-copy-constructor
为什么我们通过引用传递类的对象.当我删除&符号(&)时出现以下错误.
"Copy constructor of class A may not have parameter of type A"
Run Code Online (Sandbox Code Playgroud)
这是什么意思?可能是编译器没有考虑给定一个复制构造函数并使用默认值.如果是这种情况,为什么要调用默认值.简而言之,为什么我们使用&符号会发生什么?如果我们不这样做.
class A
{
public:
A()
{
}
A(A& tmp)
{
id = 2*tmp.id;
}
public:
int id;
};
int main()
{
A obj;
obj.id = 10;
A obj1(obj);
cout << obj1.id;
}
Run Code Online (Sandbox Code Playgroud)
在 C++ 中,函数可以通过值或引用来获取它们的参数。如果他们按值获取参数,则该值必须是可复制的。如果复制构造函数可以按值获取其参数,那么您将需要一个复制构造函数将其参数传递给它,这将导致无限循环。
考虑:
class MyInt
{
int m;
public:
MyInt(int i)
{
m = i;
}
MyInt(MyInt j)
{
j.m++;
m = j.m;
}
};
MyInt a(1);
MyInt b(a);
Run Code Online (Sandbox Code Playgroud)
编译器如何使这个工作?如果它使用默认的复制构造函数,那么它为什么需要调用我的构造函数?如果它使用我的构造函数,它如何防止a.m递增(这显然是错误的,a在按值传递时不应更改),因为没有代码可以为构造函数提供自己的副本?