Почему нет std::initializer_list
встроенного ядра?
Мне кажется, что это довольно важная особенность С++ 11, но у нее нет собственного зарезервированного ключевого слова (или чего-то подобного).
Вместо этого initializer_list
это просто класс шаблона из стандартной библиотеки, который имеет специальное неявное сопоставление из нового синтаксиса braced-init-list {...}
, который обрабатывается компилятором.
Поначалу это решение довольно хаки.
Является ли это тем, как теперь будут реализованы новые дополнения к языку С++: неявные роли для некоторых классов шаблонов, а не языком core?
Пожалуйста, рассмотрите следующие примеры:
widget<int> w = {1,2,3}; //this is how we want to use a class
почему был выбран новый класс:
widget( std::initializer_list<T> init )
вместо того, чтобы использовать что-то похожее для любой из этих идей:
widget( T[] init, int length ) // (1)
widget( T... init ) // (2)
widget( std::vector<T> init ) // (3)
- классический массив, вы могли бы добавить
const
здесь и там - в языке уже существуют три точки (var-args, теперь variadic templates), почему бы не повторить использование синтаксиса (и заставить его чувствовать себя встроенным).
- только существующий контейнер, можно добавить
const
и&
Все они уже являются частью языка. Я только написал свои 3 первые идеи, я уверен, что есть many другие подходы.