我试图将数组的元素之一设置为另一个对象。但是,编译器正在删除=运算符。为什么要在这里这样做呢?我该如何解决呢?

示例代码:

struct IntContainer
{

    IntContainer(const int value) :
    value(value)
    {
    }

    IntContainer() :
    IntContainer(0)
    {
    }

    const int value;
};

int main(int argc, char** argv)
{

    IntContainer intContainers[3];
    IntContainer newIntContainer(420);
    intContainers[0] = newIntContainer; // <-- Causes compiler error

    return 0;
}


编译此代码段时出现的编译器错误是:

main.cpp: In function 'int main(int, char**)':
main.cpp:23:24: error: use of deleted function 'IntContainer& IntContainer::operator=(const IntContainer&)'
     intContainers[0] = newIntContainer; // <-- Causes compiler error:
                        ^~~~~~~~~~~~~~~
main.cpp:2:8: note: 'IntContainer& IntContainer::operator=(const IntContainer&)' is implicitly deleted because the default definition would be ill-formed:
 struct IntContainer
        ^~~~~~~~~~~~
main.cpp:2:8: error: non-static const member 'const int IntContainer::value', can't use default assignment operator

最佳答案

编译器通常免费提供operator=和复制构造函数,但是当类包含const成员时,生成operator=毫无意义,因为您无法执行对const成员的赋值。

您可以编写自己的代码,但仍然无法为const成员分配值。

10-05 21:08