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

fre*_*low 31 c++ arrays copy-constructor assignment-operator

这是我长期以来一直想知道的事情.请看以下示例:

struct matrix
{
    float data[16];
};
Run Code Online (Sandbox Code Playgroud)

我知道默认构造函数和析构函数在这个特定示例中做了什么(没有),但是复制构造函数和复制赋值运算符呢?

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;
    }
};
Run Code Online (Sandbox Code Playgroud)

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

ice*_*ime 42

这是标准在12.8(复制类对象)中所说的内容.复制结构:

每个子对象都以适合其类型的方式复制:

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

复制作业:

每个子对象都以适合其类型的方式分配:

  • 如果子对象是类类型,则使用类的复制赋值运算符(就像通过显式限定;即忽略更多派生类中的任何可能的虚拟覆盖函数);
  • 如果子对象是一个数组,则以适合于元素类型的方式分配每个元素;
  • 如果子对象是标量类型,则使用内置赋值运算符.