Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.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++_Arrays_Copy Constructor_Assignment Operator - Fatal编程技术网

C++ C++;是否在复制控制函数中处理数组成员?

C++ C++;是否在复制控制函数中处理数组成员?,c++,arrays,copy-constructor,assignment-operator,C++,Arrays,Copy Constructor,Assignment Operator,这是我想了很久的事情。以以下为例: struct matrix { float data[16]; }; 我知道默认构造函数和析构函数在这个特定示例中做了什么(什么都不知道),但是复制构造函数和复制赋值操作符呢 struct matrix { float data[16]; // automatically generated copy constructor matrix(const matrix& that) : // What happens h

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

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::copy
std::uninitialized\u copy
memcpy
memmove
或什么?

这是标准在12.8中所说的(复制类对象)。复制构造:

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

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

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

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

两者都复制数组中的元素(而不是什么都不做或复制指针)

运行结果:

orginal10:a, copy_assign10:a, copy_constructor10:a
original10:a, copy_assign10:b, copy_constructor10:a
original10:a, copy_assign10:b, copy_constructor10:c
  • 从结果的第一行,我们可以看到至少复制了一些内容(要么是数组中的元素,要么是数组指针被复制)
  • 从接下来的两行中,我们可以看到更改“复制指定对象”和“复制构造对象”的数组并没有更改原始数组。因此,我们得出结论,复制的是元素而不是数组指针

希望这个例子是清楚的。

这不是真的C,但是(大多数)C++。@ DeVithHooxk我把问题的标题从C改为C++。
orginal10:a, copy_assign10:a, copy_constructor10:a
original10:a, copy_assign10:b, copy_constructor10:a
original10:a, copy_assign10:b, copy_constructor10:c