在复制控制函数中如何处理C ++数组成员?

这是我想了很久的事情。 以下面的例子:

struct matrix { float data[16]; }; 

我知道默认的构造函数和析构函数在这个具体的例子中是什么(没有),但是复制构造函数和复制赋值运算符呢?

 struct matrix { float data[16]; // automatically generated copy constructor matrix(const matrix& that) : // What happens here? { // (or here?) } // automatically generated copy assignment operator matrix& operator=(const matrix& that) { // What happens here? return *this; } }; 

它涉及std::copystd::uninitialized_copymemcpymemmove或什么?

这是标准在12.8(复制类对象)中所说的内容。 复制build筑:

每个子对象都以适合其types的方式进行复制:

  • 如果子对象是类types,则使用该类的复制构造函数;
  • 如果子对象是一个数组,则每个元素都以适合元素types的方式被复制;
  • 如果子对象是标量types,则使用内置的赋值运算符。

复制作业:

每个子对象都以适合其types的方式进行分配:

  • 如果子对象是类types的,则使用该类的复制赋值操作符(就像通过明确的限定;即忽略更多派生类中的任何可能的虚拟重写函数);
  • 如果子对象是一个数组,则每个元素都以适合元素types的方式分配;
  • 如果子对象是标量types,则使用内置的赋值运算符。