c++ - 赋值运算符未调用参数化构造函数,而代码中存在复制构造函数
问题描述
案例1: 当我使用赋值运算符创建类对象时,如果代码中没有复制构造函数,它会调用参数化构造函数。
下面的代码没有复制构造函数:
class Test{
public:
int a;
Test(int a){
this->a = a;
}
};
int main(){
Test x = 6;
cout<<x.a;
return 0;
}
案例2: 但是如果类中存在复制构造函数,那么如果我在声明类对象时使用赋值运算符,则会出错。
错误:无法将“Test&”类型的非常量左值引用绑定到“Test”类型的右值</p>
下面的代码带有复制构造函数
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;
}
我的问题是复制构造函数的存在如何导致错误结束?. 由于存在复制构造函数,当我将参数分配给类对象时,我的程序也应该调用 Parameterize 构造函数。
解决方案
我认为这:
Test(Test &b){
this->a = b.a;
}
其实应该是这样的:
Test(Test const &b){
this->a = b.a;
}
复制构造函数应该获得一个 const 引用,并且它们应该将参数内容复制到当前对象内容中,而不是相反..
推荐阅读
- c++ - Visual Studio 有时会加载符号,有时不会
- swiftui - 这是 iOS14 中预期的 @State var 行为还是一个错误?
- python - 查找 DataFrame 中是否存在特定值。如果不是,请将其存储在新的 DataFrame 中
- javascript - 仅接受来自一个 div 的字段值的值来自多个 div 的字段值
- python - 我应该如何更改随机输入以启用绝对随机化?
- javascript - 仅替换字符串单词中的几个字符
- php - php curl 无法连接到 xxx 端口 5001:连接被拒绝
- ios - 父 View 中的状态更改创建子 ViewModel 的新实例
- laravel - vue中没有定义属性或方法
- docker - Docker 推送到 Google Cloud Registry——对 HTTPS 服务器的 HTTP 请求