我有一个类,其成员不会被类的方法改变,所以我将其标记为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)
这是导致此问题的您的误解:
[..] 类的方法不会改变它
成员变量由类的方法(赋值运算符)更改。包括编译器合成的。如果将成员变量标记为const,则表示该变量将(不应该!)在对象的生命周期内更改其值。很明显,为对象分配新值违反了此语句。所以如果你确实不想让这个成员改变,就不要这么做const。