首页 > 解决方案 > 赋值运算符未调用参数化构造函数,而代码中存在复制构造函数

问题描述

案例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 构造函数。

标签: c++objectoopconstructorcopy-constructor

解决方案


我认为这:

Test(Test &b){
   this->a = b.a;
}

其实应该是这样的:

Test(Test const &b){
   this->a = b.a;
}

复制构造函数应该获得一个 const 引用,并且它们应该将参数内容复制到当前对象内容中,而不是相反..


推荐阅读