C++ 关于复制对象

C++ 关于复制对象,c++,objective-c,c,C++,Objective C,C,可能重复: 为什么我们可以将一个结构的对象直接指定给另一个 例如: struct student s1,s2; s2=s1 //is perfectly ok. 但我们不能将一个数组值分配给另一个数组值 例如: 尽管结构元素可能不包含任何数组 请解释。这是如何指定的。如果需要可分配数组,请使用std::vector: std::vector< int> a(10), b(10); a = b; std::vectora(10),b(10); a=b; 结构(和类)的默认赋值运

可能重复:

为什么我们可以将一个结构的对象直接指定给另一个 例如:

struct student s1,s2;
s2=s1 //is perfectly ok.
但我们不能将一个数组值分配给另一个数组值 例如:

尽管结构元素可能不包含任何数组


请解释。

这是如何指定的。如果需要可分配数组,请使用std::vector:

std::vector< int> a(10), b(10);
a = b;
std::vectora(10),b(10);
a=b;

结构(和类)的默认赋值运算符的规则是,它调用基本结构/类的赋值运算符,然后调用每个数据成员的赋值运算符。

纯粹出于历史原因,不允许在语言级别进行数组赋值。还有一个问题。

最后,我不认为有什么理由有太多的理论基础。我想这可以归结为一种期望,即数组通常足够大,因此防止意外复制是值得的


相比之下,我认为人们的期望是结构通常足够小,支持赋值的便利性超过了可能做一些意外昂贵的事情的风险。

如果为每个数据成员应用赋值运算符,如何复制结构中的数组?我认为它是逐字节复制的,对吗?也许,也许不是。如果您有一个类似MyComplementType[]的数组,那么将通过为每个数组元素调用一次MyComplementType复制构造函数来复制该数组。我不需要向量的解决方案。。。我的问题是为什么在数组的情况下不会发生这种情况??如果需要“可分配数组”,应该使用
std::array
(或者
std::tr1::array
或者
boost::array
)。std::vector并不总是合适的,特别是如果您需要一个包含少量元素的数组,并且该数组的数目在编译时已知。顺便说一句,它是按位还是按字节?有人能证实吗?一个好问题的副本和一个好的副本,但是是的。@Xaero:是的,可以。这就是我说“期望”的原因。您可以有一个大的结构或一个小的数组,但编译器作者期望数组通常会很大,但结构通常会更小。在FWIW中,C89的基本原理只是说:“添加了结构分配:即使在K&R中,它的使用也已被预示,许多现有的实现已经支持它。”
std::vector< int> a(10), b(10);
a = b;