c ++默认赋值运算符

int a[10];
int b[10];
a = b;

//

struct test {
    int a[10];
};

test a,b;
a = b;

第一个代码不能编译,因为我们不能分配数组,但第二个代码不能。 不是类的默认赋值运算符只是为每个数据成员调用赋值? 为什么要编译第二个代码?


从C ++ 11草案,第12.8节:

非联合类X的隐式定义的复制/移动赋值运算符会执行其子对象的成员复制/移动赋值。 首先分配X的直接基类,按照它们在base-specifier-list中的声明顺序,然后按照它们在类定义中声明的顺序分配X的直接非静态数据成员。 设x是该函数的参数,或者对于移动运算符,是指参数的xvalue。 每个子对象都以适合其类型的方式进行分配:

- 如果子对象是类类型的,就好像通过调用operator =将子对象作为对象表达式,并将x的相应子对象作为单个函数参数(就像通过明确限定;即忽略任何可能的虚拟覆盖在更多派生类中的函数);

- 如果子对象是一个数组,每个元素都以适合元素类型的方式分配;

- 如果子对象是标量类型,则使用内置赋值运算符。

这里的重要部分是: if the subobject is an array, each element is assigned, in the manner appropriate to the element type;

链接地址: http://www.djcxy.com/p/73247.html

上一篇: c++ default assignment operator

下一篇: C/C++ post