0

何らかの理由で、const フィールド _constFoo の初期化のため、コンパイラはこのクラスの operator= を生成できません。理由を知りたいだけです。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 に答える