0

由于某种原因,编译器无法为此类生成 operator= 因为 const 字段 _constFoo 的初始化,我只想知道为什么。使用VS2010。

class Foo {
public:
    Foo(int f) : _constFoo(f) { }
    int getFoo() const { return _constFoo; }
    //void operator=(const Foo &f) { memcpy(this, &f, sizeof(Foo)); }
private:
    const int _constFoo;
};

int main(int argc, char *argv[])
{
    Foo f(5);
    cout << f.getFoo() << endl;
    f = Foo(6); //error C2582: 'operator =' function is unavailable in 'Foo'
    cout << f.getFoo() << endl;
}
4

2 回答 2

2

该标准不允许它:

C++03 12.8。复制对象

12) [...] 如果隐式定义了复制赋值运算符的类具有:

  • 类型的非静态数据成员const,或
  • 引用类型的非静态数据成员,或
  • 具有不可访问的复制赋值运算符的类类型(或其数组)的非静态数据成员,或
  • 具有不可访问的复制赋值运算符的基类。

[...]

强调我的。

所以你的程序格式不正确。通过不定义您自己的赋值运算符,编译器试图隐式定义一个。

于 2012-08-25T22:38:17.197 回答
0

这是因为默认的赋值运算符,它只是复制数据,不能用于“const”。因此,不能盲目地复制对象。

于 2012-08-25T22:35:35.633 回答