赋值运算符不调用参数化构造函数,而代码中存在复制构造函数
Assignment operator is not calling parameterized constructor while copy constructor present in code
案例 1:
当我使用赋值运算符创建 class 的对象时,如果代码中没有复制构造函数,它会调用参数化构造函数。
以下代码没有复制构造函数:
class Test{
public:
int a;
Test(int a){
this->a = a;
}
};
int main(){
Test x = 6;
cout<<x.a;
return 0;
}
案例 2:
但是,如果 class 中存在复制构造函数,那么如果我在声明 class 对象时使用赋值运算符,则会出错。
错误:无法将“Test&”类型的非常量左值引用绑定到“Test”类型的右值
以下代码带有复制构造函数
class Test{
public:
int a;
Test(int a){
this->a = a;
}
Test(Test &b){
this->a = b.a;
}
};
int main(){
Test x = 6;
cout<<x.a;
return 0;
}
我的问题是复制构造函数的存在如何导致结果以错误结束? .由于存在复制构造函数,当我将参数分配给 class.
的对象时,我的程序也应该调用 Parameterize 构造函数
我认为:
Test(Test &b){
this->a = b.a;
}
实际上应该是这样的:
Test(Test const &b){
this->a = b.a;
}
复制构造函数应该得到一个const引用,并且他们应该将参数内容复制到当前对象内容中,而不是相反..
我推荐这个Question
因为解释了const和non-const变量。
是因为解释这个错误:
Error : cannot bind non-const lvalue reference of type ‘Test&’ to an
rvalue of type ‘Test’
C++ 允许这样做,因为它是初始化:
int main(){
Test x=6;//initialization "const Test& obj = 6" OK
}
但是 C++ 不允许这样(非常量值):
int main(){
Test x=6;//initialization "Test& obj = 6" Not Ok!
}
案例 1: 当我使用赋值运算符创建 class 的对象时,如果代码中没有复制构造函数,它会调用参数化构造函数。
以下代码没有复制构造函数:
class Test{
public:
int a;
Test(int a){
this->a = a;
}
};
int main(){
Test x = 6;
cout<<x.a;
return 0;
}
案例 2: 但是,如果 class 中存在复制构造函数,那么如果我在声明 class 对象时使用赋值运算符,则会出错。
错误:无法将“Test&”类型的非常量左值引用绑定到“Test”类型的右值
以下代码带有复制构造函数
class Test{
public:
int a;
Test(int a){
this->a = a;
}
Test(Test &b){
this->a = b.a;
}
};
int main(){
Test x = 6;
cout<<x.a;
return 0;
}
我的问题是复制构造函数的存在如何导致结果以错误结束? .由于存在复制构造函数,当我将参数分配给 class.
的对象时,我的程序也应该调用 Parameterize 构造函数我认为:
Test(Test &b){
this->a = b.a;
}
实际上应该是这样的:
Test(Test const &b){
this->a = b.a;
}
复制构造函数应该得到一个const引用,并且他们应该将参数内容复制到当前对象内容中,而不是相反..
我推荐这个Question 因为解释了const和non-const变量。 是因为解释这个错误:
Error : cannot bind non-const lvalue reference of type ‘Test&’ to an rvalue of type ‘Test’
C++ 允许这样做,因为它是初始化:
int main(){
Test x=6;//initialization "const Test& obj = 6" OK
}
但是 C++ 不允许这样(非常量值):
int main(){
Test x=6;//initialization "Test& obj = 6" Not Ok!
}