0

处理这个问题的最佳方法是什么?我希望“x”保持不变。

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'
}
4

2 回答 2

2

设为x私有。添加一个公共函数,例如int getX()返回值。例如:

class Foo
{
public:
    Foo(int x) : _x(x) {}
    int getX(){return _x;}
private:
    int _x;
};

现在改变 x 的唯一方法是调用构造函数,这是你想要的行为(我认为)。

于 2013-04-15T06:42:13.000 回答
1

编译器不会生成operator=(分配每个数据成员)的默认版本,因为它无法知道您想对该 const 数据成员做什么。这并不意味着你不能编写自己的operator=,它只是意味着编译器不会为你提供一个。所以决定你想用那个 const 数据成员做什么,并编写一个赋值运算符来完成它,以及赋值运算符需要做的任何其他事情。

于 2013-04-15T15:41:17.000 回答