当赋值运算符重载时,const类成员是否有用?

And*_*tan 5 c++

我有一个类,其成员不会被类的方法改变,所以我将其标记为const.我的问题是我使用默认赋值运算符就像复制构造函数一样,以避免多个声明.但在这种情况下,赋值运算符不会自动生成,因此我得到了一些编译器错误: 'operator =' function is unavailable.这似乎没有真正的生活场景,其中可以实际使用const类成员(例如,你在STL代码中看到过任何const成员吗?).

有没有办法解决这个问题,除了删除const

编辑:一些代码

class A
{
public :
   const int size;
   A(const char* str) : size(strlen(str)) {}
   A() : size(0) {}
};


A create(const char* param)
{
    return A(param);
}


void myMethod()
{
    A a;

    a = create("abcdef");
    // do something

    a = create("xyz");
    // do something
}
Run Code Online (Sandbox Code Playgroud)

Fre*_*abe 3

这是导致此问题的您的误解:

[..] 类的方法不会改变它

成员变量由类的方法(赋值运算符)更改包括编译器合成的。如果将成员变量标记为const,则表示该变量将(不应该!)在对象的生命周期内更改其值。很明显,为对象分配新值违反了此语句。所以如果你确实不想让这个成员改变,就不要这么做const