处理此问题的最佳方法是什么?我希望'x'保持不变。'operator ='函数由于const成员而不可用
class Foo
{
public:
Foo(int x) : x(x) { }
const int x;
};
void main()
{
Foo a(0), b(1);
b = a; // error C2582: 'operator =' function is unavailable in 'Foo'
}
处理此问题的最佳方法是什么?我希望'x'保持不变。'operator ='函数由于const成员而不可用
class Foo
{
public:
Foo(int x) : x(x) { }
const int x;
};
void main()
{
Foo a(0), b(1);
b = a; // error C2582: 'operator =' function is unavailable in 'Foo'
}
使x
私人。添加一个公共函数,如int getX()
以返回值。例如:
class Foo
{
public:
Foo(int x) : _x(x) {}
int getX(){return _x;}
private:
int _x;
};
现在只有改变x的方法是调用构造函数,这是你想要的行为(我认为)。
编译器不会生成operator=
(它分配每个数据成员)的默认版本,因为它无法知道您想要对该常量数据成员执行什么操作。这并不意味着你不能编写自己的operator=
,它只意味着编译器不会为你提供一个。因此,决定你想用这个常量数据成员做什么,并写一个赋值运算符,以及赋值运算符需要做的任何其他操作。
*“我想'x'保持常量”*为什么?你正试图改变它。 –
因为它永远不会改变,我使用的std算法需要'operator ='。我知道我可以摆脱const,它会工作,但也很有趣,知道是否有另一种方式。 – TheVTM
要么保持'const'并禁用'operator =',要么改变它,使它不是'const'(或者我认为'operator ='离开'x'是这样的,这会让你的用户想要然而,杀了你)。 – Yuushi