使用大括号进行 std::array 的复制构造

3
为什么以下代码无法编译:
#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;
}

GCC 4.8.1 报错:

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


花括号用于 std::array 中的元素。整个数组不是一个元素。您甚至不需要显式定义该复制构造函数。 - chris
2个回答

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

2

应该是这样的

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

我认为在C++11中,花括号提供了统一的语法,将()改成{}不应该导致编译失败。另外,为什么错误信息会如此奇怪,为什么它尝试进行size_t的转换? - user2052436

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接