C++ c++;:memberwise作业是如何工作的?
可能重复:C++ c++;:memberwise作业是如何工作的?,c++,variable-assignment,C++,Variable Assignment,可能重复: 如果我不重写类的操作符=,它将使用默认的memberwise赋值 但这意味着什么 struct A { int array[100]; }; A a; A b=a; 没有错误。b如何处理a的数组?通常array\u b=array\u a无效 另一个例子: struct A { vector<int> vec; }; A a; A b=a; 结构A{ 向量向量机; }; A A; A b=A; b如何应对a的vec?通过赋值(vec\u b=vec
如果我不重写类的
操作符=
,它将使用默认的memberwise赋值
但这意味着什么
struct A {
int array[100];
};
A a;
A b=a;
没有错误。b
如何处理a
的数组
?通常array\u b=array\u a
无效
另一个例子:
struct A {
vector<int> vec;
};
A a;
A b=a;
结构A{
向量向量机;
};
A A;
A b=A;
b
如何应对a
的vec
?通过赋值(vec\u b=vec\u a
),构造函数(vec\u b=vector(vec\u a)
)或其他神秘方式
A b=a;
不是赋值,称为
调用隐式生成的复制构造函数,从现有对象a
创建新对象b
隐式生成的复制构造函数复制数组
成员
为了完整起见,我将在这里添加标记副本的标准引用
C++03标准:12.8(复制类对象)
以适合其类型的方式复制每个子对象:
- 如果子对象是类类型,则使用该类的复制构造函数李>
- 如果子对象是数组,则以适合元素类型的方式复制每个元素强>
- 如果子对象是标量类型,则使用内置赋值运算符
如果成员具有复制构造函数,则会调用它们。如果不是,默认的复制构造函数将执行与memcpy等效的操作。看
对于非指针数组,将复制每个元素。通常,是。什么是数组的浅拷贝?@KonradRudolph:在这种情况下,一个
memcpy
。浅拷贝将应用于指针,这就是三字规则的原因。这也适用于OP的“通常情况下,数组b=数组a无效”。在这种情况下,不能使用这样的赋值,但可以通过这种方式构造新数组(只要rhs是数组文字)。@ChrisA。如果数组元素是指针,则为。@Als您的意思是这里是浅拷贝,修改对象a的数组变量将修改对象b的数组变量的内容吗?可能是重复的