为什么默认的复制构造函数可以复制const或引用成员,但默认的复制赋值运算符却不能?

问题描述 投票:0回答:2
class Test{
    int num;
    const int constVal;
    int& ref;

public:
    Test(int a):constVal(2),ref(a){
        std::cout<<"create"<<std::endl;
    }
};

int main() {

    int a=23;
    Test tOne(a);
    Test tTwo=tOne;
    return 0;
}

我知道如果一个类有const或reference成员,编译器不会产生默认的复制赋值函数。因为给const或reference对象赋值是非法的。我想知道为什么复制构造函数工作得很好并且我理解它们的行为应该是一致的

c++ constructor copy-constructor copy-assignment
2个回答
2
投票

常量和引用成员一旦构造就无法修改。 但它们可以在构造函数中设置,这正是默认复制构造函数的作用。


0
投票

为什么默认的复制构造函数可以复制 const 或引用成员,但默认的复制赋值运算符却不能?

因为构造函数执行初始化,它只发生一次,并且允许用于const数据成员,而赋值运算符执行赋值,这对于const数据成员来说是不允许的。

© www.soinside.com 2019 - 2024. All rights reserved.