可能重复:
How are C array members handled in copy control functions?
如果我不覆盖类的operator =
,它将使用默认的成员分配。
但它是什么意思?
struct A {
int array[100];
};
A a;
A b=a;
没有错误。 b
如何应对a
的{{1}}?通常array
无效。
另一个例子:
array_b = array_a
struct A {
vector<int> vec;
};
A a;
A b=a;
如何应对b
的{{1}}?通过赋值(a
),构造函数(vec
)或其他神秘方式?
答案 0 :(得分:9)
A b=a;
不是作业,它被称为 Copy Initialization 。
调用隐式生成的复制构造函数,以从现有对象b
创建新对象a
。
隐式生成的复制构造函数生成array
成员的副本。
为了完整起见,我将在此处添加标记副本中的标准引文。
C ++ 03标准:12.8(复制类对象)
以适合其类型的方式复制每个子对象:
- 如果子对象是类类型,则使用该类的复制构造函数;
- 如果子对象是一个数组,则以适合于元素类型的方式复制每个元素;
- 如果子对象是标量类型,则使用内置赋值运算符。
答案 1 :(得分:1)
如果成员具有复制构造函数,则会调用它们。如果没有,默认的复制构造函数就相当于memcpy。请参阅Memberwise Assignment and Initialization。
对于非指针数组,每个元素都被复制。