考虑以下代码:
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} {}
};
上面的代码给出了编译错误。
错误:没有从“std::initializer_list”到“int”的可行转换
在网上搜索我发现std::array
用 a初始化成员的“正确”方法std::list_initializer
是reinterpret_cast
按以下方式使用:
bar(std::initializer_list<int> L) : a(reinterpret_cast<std::array<int, 3> const&>(*(L.begin()))) {}
问:
为什么我可以在构造函数的初始化列表中使用 a 来初始化成员std::vector
,std::initializer_list
但我不能成为成员std::array
?
上面显示的解决方法是用reinterpret_cast
正确的方法初始化成员std::array
吗std::initializer_list
?