gpt4 book ai didi

c++ - 无法引用隐式声明的函数 operator= - 它是已删除的函数

转载 作者:太空宇宙 更新时间:2023-11-04 12:43:03 29 4
gpt4 key购买 nike

    std::vector<Object> vec(n); 
for (auto & member :vec)
{
member = anExistingObject;
}

这段代码抛出了标题中的错误。但是,如果我说

auto member = anExistingObject;

然后它工作正常。我只想为每个 vector 元素制作一份 anExistingObject 的拷贝。为什么第一种方法会抛出错误?

最佳答案

Why does the first way throw the error?

错误信息解释:

Function operator= declared implicitly cannot be referenced - it is a deleted function

所以,你不能复制赋值,因为复制赋值运算符被删除了。

However, if I say

auto member = anExistingObject;

then it works fine.

因此,您的类是可复制构造的。这不是现有对象的分配。


What are soem reasons for why something is not copy-assignable?

典型案例:

  • 类有引用或常量成员。
  • 类具有不可复制分配的基类或类成员。
  • 类已明确定义移动构造函数或移动赋值运算符
  • 赋值运算符被显式删除(不适用于这种情况,因为错误消息说该运算符是隐式声明的)。

对于不太典型的情况,请参阅规范。

您可以通过为类显式定义复制赋值运算符来使 Object 可复制赋值。


附言您可以像这样更简单地构造 vector :

std::vector<Object> vec(n, anExistingObject);

此拷贝-构造 vector 的元素,不需要赋值。

关于c++ - 无法引用隐式声明的函数 operator= - 它是已删除的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53176082/

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