Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;默认赋值运算符_C++_Compiler Errors_Variable Assignment_Assignment Operator - Fatal编程技术网

C++ c++;默认赋值运算符

C++ c++;默认赋值运算符,c++,compiler-errors,variable-assignment,assignment-operator,C++,Compiler Errors,Variable Assignment,Assignment Operator,// 第一个代码不编译,因为我们不能分配数组,但第二个可以。类的默认赋值运算符不是简单地调用每个数据成员的赋值吗?第二段代码为什么要编译?摘自C++11草案第12.8节: 非联合类X的隐式定义的复制/移动赋值运算符执行其子对象的成员复制/移动赋值。X的直接基类首先按照它们在基说明符列表中的声明顺序分配,然后按照它们在类定义中声明的顺序分配X的直接非静态数据成员。设x为函数的参数,或对于move运算符,为引用参数的xvalue。每个子对象都以适合其类型的方式指定: -如果子对象是类类型的,就像通过

//


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

摘自C++11草案第12.8节:

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

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

-如果子对象是数组,则以适合元素类型的方式指定每个元素

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


这里的重要部分是:
如果子对象是数组,则以适合元素类型的方式分配每个元素

默认的类赋值运算符将复制数组的所有元素。这就是
std::array
在没有用户提供的情况下的工作方式。因为作为成员的数组有一个特殊的例外。为什么要涉及std::array?我错过什么了吗?
int a[10];
int b[10];
a = b;
struct test {
    int a[10];
};

test a,b;
a = b;