c++ - 将结构复制到具有 const 值的数组

标签 c++ struct copy-assignment

我正在尝试替换在非 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/

相关文章:

c++ - 为非类型模板结构的成员结构重载复制赋值运算符

c++ - CComBSTR内存分配

c++ - 完全作为库实现的 C++ is_lambda 特性是不可能的吗?

c++ - 从 'long int' 到 'void (*)()' [-fpermissive] 的无效转换

c++ - 创建窗口后未调用 WM_PAINT

c - 需要帮助将 qsort 与结构数组一起使用

c - 如何在 C 中以表示其内容的位打印结构对象?

c++ - 是否推荐具有 copy-and-swap 习语和自赋值检查的复制赋值运算符?

c++ - 为什么复制赋值运算符的参数应该是引用?

go - 使用反射从深度嵌套的结构中提取标签