Struct 中的数组无法正确复制

Array inside Struct wont copy correctly

想知道是否有人可以帮助我,我的代码中有这个结构

struct Gate {
  int output[9];
};

我有一个那个结构的向量,但是推到通常会创建一个副本的向量坏了,因为它只是一个浅拷贝,而我的结构有一个数组 所以我试图通过创建自定义复制构造函数来解决这个问题。

struct Gate {
    int output[9];
    Gate(const Gate &old){
        copy(old.output, old.output + 9, output);
    }
};

但现在我的初始化程序不再工作了,因为他们正在尝试使用这个复制构造函数

Gate alwaysFirst{{0,0,0,1,1,1,2,2,2}};
Gate alwaysSecond{{0,1,2,0,1,2,0,1,2}};
universal_gate_finder.cpp:39:41: error: cannot convert '<brace-enclosed initializer list>' to 'const Gate&'
   39 |     Gate alwaysFirst{{0,0,0,1,1,1,2,2,2}};
      |  

有人知道解决这个问题的方法吗?

Gate alwaysFirst{{0,0,0,1,1,1,2,2,2}};
Gate alwaysSecond{{0,1,2,0,1,2,0,1,2}};

这些行使用 聚合初始化,这仅适用于 聚合,不能有用户声明的构造函数。

通过声明自定义复制构造函数,您的类型不再聚合。

您可以用 std::initializer_list 构造函数或通过引用获取数组的构造函数替换聚合初始化,这两者都会(或多或少)重新启用该语法。

但是,没有必要声明拷贝构造函数。隐式复制构造函数已经通过逐元素复制构造从源对象构造数组成员。

您的替换使用复制赋值,这与直接复制构造元素没有任何好处。

声明复制构造函数也会禁用隐式移动构造函数,这是一种额外的悲观情绪。

你试过了吗struct Gate { std::array<int, 9> output; };
Compiler Explorer