gpt4 book ai didi

c++ - 常量字段中的初始化列表不生成 operator=

转载 作者:行者123 更新时间:2023-11-28 03:32:25 27 4
gpt4 key购买 nike

由于某些原因,由于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;
}

最佳答案

标准不允许:

C++03 12.8。复制对象

12) [...] A program is ill-formed if the class for which a copy assignment operator is implicitly defined has:

  • a non-static data member of const type, or
  • a non-static data member of reference type, or
  • a non-static data member of class type (or array thereof) with an inaccessible copy assignment operator, or
  • a base class with an inaccessible copy assignment operator.

[...]

强调我的。

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

关于c++ - 常量字段中的初始化列表不生成 operator=,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12126144/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com