std::使用大括号的数组复制构造

std::array copy construction using braces

本文关键字:数组 复制 std      更新时间:2023-10-16

为什么下面的代码不编译:

#include <array>
struct A
{
    std::array<size_t, 5> i_;
    A() {}
    A( A const& a)
    : i_{ a.i_ } {}
};
int main()
{
    A a1;
    A a2 = a1;
    return 0;
}

海湾合作委员会 4.8.1 说

错误:无法在初始化中将"const std::array"转换为"long unsigned int": i_{ a.i_ }

问题是std::array是一个聚合,因此你不能使用大括号来调用复制 ctor。您需要指定元素。这也解释了您的错误消息,它正在尝试将a.i_转换为数组的元素,这是一个size_t。由于您无法执行此操作,因此必须使用i_(a.i_)来创建副本。

应该是

A( A const& a )
: i_( a.i_ ) {}