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

2023-12-05

这是我很久以来一直想知道的事情。举个例子:

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 or std::uninitialized_copy or memcpy or memmove或者是什么?


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

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

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

复制作业:

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

  • 如果子对象是类类型,则使用该类的复制赋值运算符(就好像通过显式限定;也就是说,忽略更多派生类中任何可能的虚拟重写函数);
  • 如果子对象是数组,则以适合元素类型的方式分配每个元素;
  • 如果子对象是标量类型,则使用内置赋值运算符。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 数组成员在复制控制函数中如何处理? 的相关文章

随机推荐