<分区>
考虑以下代码:
struct foo {
std::vector<int> v;
foo(std::initializer_list<int> L) : v{L} {}
};
上面的代码可以正常编译并按预期初始化 v
。现在考虑以下代码:
struct bar {
std::array<int, 3> a;
bar(std::initializer_list<int> L) : a{L} {}
};
上面这段代码给出了一个编译错误。
error: no viable conversion from 'std::initializer_list' to 'int'
在网上搜索我发现用 std::list_initializer
初始化成员 std::array
的“正确”方法是使用 reinterpret_cast
以下列方式:
bar(std::initializer_list<int> L) : a(reinterpret_cast<std::array<int, 3> const&>(*(L.begin()))) {}
问:
为什么我可以在构造函数的初始化列表中使用 std::initializer_list
初始化成员 std::vector
但我不能初始化成员 std::array
?
上面显示的使用 reinterpret_cast
的解决方法是否是使用 std::initializer_list
初始化成员 std::array
的正确方法?