Рассмотрим следующий фрагмент кода:
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
с помощью std::list_initializer
заключается в использовании reinterpret_cast
следующим образом:
bar(std::initializer_list<int> L) : a(reinterpret_cast<std::array<int, 3> const&>(*(L.begin()))) {}
Q:
Почему я могу инициализировать член std::vector
с помощью std::initializer_list
в списке инициализации конструктора, но не могу член std::array
?
Является ли показанный выше обходной путь с reinterpret_cast
правильным способом инициализации члена std::array
с std::initializer_list
?
std::array
не имеет никаких конструкторов, кроме того, что ему дает компилятор. - person chris   schedule 19.06.2015