我正在尝试替换在非 const 数组中具有 const 值的结构值,但无法编译:
无法分配“Foo”类型的对象,因为其复制赋值运算符已被隐式删除
这是一个例子:
struct Foo {
const int id;
int value;
Foo(): id(-1), value(-1) {}
Foo(int id): id(id), value(0) {}
};
int main(int argc, const char * argv[]) {
Foo foos[10];
foos[0] = Foo(1234);
return 0;
}
我来自一个快速背景,它是有效的,因为它将结构值复制到数组中。
我尝试制作我认为是复制赋值运算符的内容,但对于 const 成员,我尝试的内容也不起作用。
这就是我试图为复制赋值运算符做的事情:
Foo& operator= (Foo newVal) {
// what do I put here!?
return *this;
};
对数组执行 memcpy
是可行的,但似乎不适合这项工作。
作为 C++ 新手,我不确定这种类型的流程的正确模式是什么。
最佳答案
C++ 非常严格地对待 const
。如果可能的话(没有 UB)复制这样的结构会很痛苦。也许您真正想要的是“只读”?在这种情况下,您可以使用公共(public) getter/setter 将字段设为私有(private):
struct Foo {
public:
Foo(): id(-1), value(-1) {}
Foo(int id): id(id), value(0) {}
int getId() const {
return id;
}
int getValue() const {
return value;
}
void setValue(int newValue) {
value = newValue;
}
private:
int id;
int value;
};
关于c++ - 将结构复制到具有 const 值的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63599073/