c++ - Initialization of std::array with std::initializer_list in constructor's initialization list -
this question has answer here:
consider following piece of code:
struct foo { std::vector<int> v; foo(std::initializer_list<int> l) : v{l} {} }; the code above compiles fine , initializes v expected. consider following piece of code:
struct bar { std::array<int, 3> a; bar(std::initializer_list<int> l) : a{l} {} }; the above piece of code gives compile error.
error: no viable conversion 'std::initializer_list' 'int'
searching web found "proper" way initialize member std::array std::list_initializer use reinterpret_cast in following manner:
bar(std::initializer_list<int> l) : a(reinterpret_cast<std::array<int, 3> const&>(*(l.begin()))) {} q:
why can initialize member std::vector std::initializer_list in initialization list of constructor can't member std::array?
is work-around showed above reinterpret_cast proper way initialize member std::array std::initializer_list?
std::array designed (in boost library) support braces initialization syntax c++03. way in c++03 pod (plain old data) type, 1 no constructors. initializer lists introduced in c++11, along std::array, std::array not changed boost version use initializer lists. so, it's historical.
by way, note reinterpret_cast dangerous here because initializer list may contain fewer items array.
Comments
Post a Comment