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::copy或std::uninitialized_copy或memcpy或memmove或什么?
ice*_*ime 42
这是标准在12.8(复制类对象)中所说的内容.复制结构:
每个子对象都以适合其类型的方式复制:
- 如果子对象是类类型,则使用该类的复制构造函数;
- 如果子对象是一个数组,则以适合于元素类型的方式复制每个元素;
- 如果子对象是标量类型,则使用内置赋值运算符.
复制作业:
每个子对象都以适合其类型的方式分配:
- 如果子对象是类类型,则使用类的复制赋值运算符(就像通过显式限定;即忽略更多派生类中的任何可能的虚拟覆盖函数);
- 如果子对象是一个数组,则以适合于元素类型的方式分配每个元素;
- 如果子对象是标量类型,则使用内置赋值运算符.
| 归档时间: |
|
| 查看次数: |
4198 次 |
| 最近记录: |