复制结构中的构造函数:是否复制数组 我有一个关于C++中复制构造函数行为的问题。我有一个结构如下: struct Vec4 { public: float elems[4]; };

复制结构中的构造函数:是否复制数组 我有一个关于C++中复制构造函数行为的问题。我有一个结构如下: struct Vec4 { public: float elems[4]; };,c++,copy-constructor,assignment-operator,C++,Copy Constructor,Assignment Operator,现在如果我这样做: Vec4 copied = some_func(); // returns a Vec4 object 这将执行elms数组的深度复制,还是只复制指针地址?我认为应该是后者,应该提供显式的复制构造函数和赋值运算符,但我不确定 我做了一个小测试,它做了它应该做的,但我不确定这是否只是一个意外 是的,elems是Vec4对象的子对象,因此它与Vec4一起被复制。没有要复制的指针。数组元素实际上嵌入到Vec4对象中 我发现术语深浅,在C和C++中有点误导。我认为更好的方式是,默认

现在如果我这样做:

Vec4 copied = some_func(); // returns a Vec4 object

这将执行elms数组的深度复制,还是只复制指针地址?我认为应该是后者,应该提供显式的复制构造函数和赋值运算符,但我不确定


我做了一个小测试,它做了它应该做的,但我不确定这是否只是一个意外

是的,
elems
Vec4
对象的子对象,因此它与
Vec4
一起被复制。没有要复制的指针。数组元素实际上嵌入到
Vec4
对象中


<>我发现术语深浅,在C和C++中有点误导。我认为更好的方式是,默认副本不会遵循任何级别的间接寻址(例如指针)。你可以有一个真正的“深”对象(很多子对象的子对象等等),其中不涉及间接性,而且整个东西仍然会被复制,但我们仍然称之为“浅复制”。如果需要执行任何间接操作,则需要实现一个自定义的复制构造函数,该构造函数执行“深度复制”。

是的,数组是按值复制的。“它只是复制指针地址吗?”-没有要复制地址的指针。数组是一个数组,而不是指针。想想看,该“地址”会去哪里?它必须放在指针中,但此结构中没有指针成员。这也应该告诉你如果你使用
float*元素会发生什么作为成员,并使用动态内存分配。如果可以,您仍然应该使用
std::array
(即,如果您有c++11编译器)