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