【问题标题】:Why Compiler do not provide default assignment operator if a class has non-static data membera of const or referance type in C++? [duplicate]如果类在 C++ 中具有 const 或引用类型的非静态数据成员,为什么编译器不提供默认赋值运算符? [复制]
【发布时间】:2019-10-18 13:11:48
【问题描述】:
#include<iostream> 
using namespace std; 

class Test     
{ 
    int x; 
    int &ref; 
public: 
    Test (int i):x(i), ref(x) {} 
    void print() { cout << ref; } 
    void setX(int i) { x = i; }     
}; 

int main()     
{     
    Test t1(10);     
    Test t2(20);     
    t2 = t1;     
    t1.setX(40);     
    t2.print();     
    return 0;     
} 

这个程序给出一个编译错误

【问题讨论】:

  • 这个程序给带来的只是眼睛酸痛。请花时间格式化您的问题,并添加完整的错误消息。
  • 按“编辑”,选择代码,然后按“{}”按钮。
  • 尝试自己写这个操作符。你会发现这是不可能的,这应该是不期望编译器这样做的充分理由。

标签: c++


【解决方案1】:

引用和 const 变量只能在构造时赋值。赋值运算符仅适用于已构造的对象。

【讨论】:

  • 这里的对象会先构造然后才会报错?
  • @user12238659 一旦构造了对象,那些引用和常量值就不能改变。默认赋值运算符要求复制所有成员的值,即更改。
猜你喜欢
  • 2012-06-02
  • 2010-10-12
  • 2018-01-20
  • 2014-04-21
  • 2014-06-06
  • 2023-03-24
  • 1970-01-01
  • 2010-12-22
  • 1970-01-01
相关资源
最近更新 更多