Я пытаюсь понять массив boost . Код можно легко прочитать с сайта автора.
В обосновании дизайна автор (Николай М. Йосуттис) упомянул, что возможны следующие два типа инициализации.
boost::array<int,4> a = { { 1, 2, 3 } }; // Line 1
boost::array<int,4> a = { 1, 2, 3 }; // Line 2
В моем эксперименте с g ++ (версия 4.1.2) строка 1 работает, а строка 2 - нет.
(Строка 2 дает следующее:
warning: missing braces around initializer for 'int [4]'
warning: missing initializer for member 'boost::array<int, 4ul>::elems'
)
Тем не менее, мой главный вопрос, как работает Линия 1? Я пытался написать класс, похожий на array.hpp, и использовать оператор, такой как строка 1, но это не сработало :-(. Ошибка
typedef array< unsigned int, 10 > MyArray;
MyArray b = { { 1, 2, 3 } }; // Line 74
array_test.cpp:74: error: in C++98 'b' must be initialized by constructor, not by '{...}'
array_test.cpp:74: error: no matching function for call to 'array<unsigned int, 10u>::array(<brace-enclosed initializer list>)'
array.h:16: note: candidates are: array<unsigned int, 10u>::array()
array.h:16: note: array<unsigned int, 10u>::array(const array<unsigned int, 10u>&)
Может кто-нибудь объяснить мне? Есть ли что-то особенное в линии 1, что мне нужно знать?