Почему не std::initializer_list
встроен базовый язык?
Мне кажется, что это довольно важная особенность C ++ 11, но у него нет собственного зарезервированного ключевого слова (или чего-то подобного).
Вместо этого initializer_list
это просто класс шаблона из стандартной библиотеки, который имеет специальное неявное сопоставление из нового списка инициализации в фигурных скобках. {...}
синтаксиса скобках, который обрабатывается компилятором.
На первый взгляд это решение довольно хакерское .
Так будут ли теперь реализовываться новые дополнения к языку C ++: неявными ролями некоторых классов шаблонов, а не базовым языком?
Пожалуйста, рассмотрите эти примеры:
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, теперь вариативные шаблоны), почему бы не использовать синтаксис повторно (и сделать его встроенным )
- только существующий контейнер, можно добавить
const
и&
Все они уже являются частью языка. Я написал всего 3 свои первые идеи, уверен, что есть много других подходов.