Насколько тесно связан brace-initializer-list компилятора с типом `std :: initializer_list`? - PullRequest
2 голосов
/ 06 января 2012

Могу ли я добиться того же эффекта без заголовка C ++ <initializer_list>?

Должен ли class initializer_list жить в namespace std (требует ли это компилятор)?

Я в порядке с решением, которое работает на большой пятерке (GCC, MSVC, Intel, Clang, Comeau)

1 Ответ

4 голосов
/ 06 января 2012

Это тесно связано по стандарту.Это обертка вокруг созданного компилятором массива (хотя стандарт не говорит, насколько точно - GCC использует конструктор с указателем и размером, MSVC использует конструктор с двумя точками).И да, он должен быть в пространстве имен std и в заголовке <initializer_list>.

Вам нужно увидеть, какие конструкторы они используют в каждом компиляторе, который вы хотите поддерживать, и скопировать его в вашей версии,но TBH, я не вижу смысла.

Шаблон std::initializer_list не предопределен;если заголовок <initializer_list> не включен до использования std::initializer_list - даже неявного использования, в котором тип не назван (7.1.6.4) - программа плохо сформирована.

Объекттипа std::initializer_list<E> создается из списка инициализаторов, как если бы реализация выделяла массив из N элементов типа E, где N - количество элементов в списке инициализаторов.Каждый элемент этого массива инициализируется копией с соответствующим элементом списка инициализатора, и объект std::initializer_list<E> создается для ссылки на этот массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...