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
想知道是否有人可以帮助我,我的代码中有这个结构
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