Пространства имён
Варианты
Действия

std::initializer_list<T>::initializer_list

Материал из cppreference.com
< cpp‎ | utility
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм(C++20)
Вариативные функции
initializer_list
(C++11)
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования(C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
std::initializer_list
Функции элементы
Ёмкость
Итераторы
Функции не элементы
 
initializer_list()noexcept;
(начиная с C++11)
(до C++14)
constexpr initializer_list()noexcept;
(начиная с C++14)

Объект типа std::initializer_list<T> это облегчённый прокси-объект, который обеспечивает доступ к массиву объектов типа const T.

Объект std::initializer_list создаётся автоматически, когда:

std::initializer_list может быть реализован, как пара указателей или указатель и длина. Копирование std::initializer_list не копирует резервный массив соответствующего списка инициализаторов.

Программа некорректна, если объявлена явная или частичная специализация std::initializer_list.

Содержание

[править]Типы элементов

Тип элемента Объявление
value_typeT
referenceconst T&
const_referenceconst T&
size_typestd::size_t
iteratorconst T*
const_iteratorconst T*

[править]Функции элементы

создаёт пустой список инициализаторов
(public функция-элемент)[править]
Ёмкость
возвращает количество элементов в списке инициализации
(public функция-элемент)[править]
Итераторы
возвращает указатель на первый элемент
(public функция-элемент)[править]
возвращает указатель на элемент за последним элементом
(public функция-элемент)[править]

[править]Функции не элементы

перегружает std::begin
(шаблон функции)[править]
специализирует std::end
(шаблон функции)[править]
Шаблоны функций, перегруженые для std::initializer_list
возвращает обратный итератор на начало контейнера или массива
(шаблон функции)[править]
(C++14)
возвращает обратный конечный итератор для контейнера или массива
(шаблон функции)[править]
(C++17)
проверяет, пустой ли контейнер
(шаблон функции)[править]
(C++17)
получает указатель на базовый массив
(шаблон функции)[править]

[править]Примечание

Макрос Тестирования функциональностиЗначениеСтандартФункциональность
__cpp_initializer_lists200806L(C++11)Список инициализации и std::initializer_list

[править]Пример

#include <initializer_list>#include <iostream>#include <vector>   template<class T>struct S {std::vector<T> v; S(std::initializer_list<T> l): v(l){std::cout<<"сконструирован из "<< l.size()<<"-элементов списка\n";}void append(std::initializer_list<T> l){ v.insert(v.end(), l.begin(), l.end());}std::pair<const T*, std::size_t> c_arr()const{return{&v[0], v.size()};// копирование списка инициализации в операторе return// это НЕ использование std::initializer_list}};   template<typename T>void templated_fn(T){}   int main(){ S<int> s ={1, 2, 3, 4, 5};// копирование списка инициализации s.append({6, 7, 8});// список инициализации при вызове функции   std::cout<<"Размер вектора теперь "<< s.c_arr().second<<" int’ов:\n";   for(auto n : s.v)std::cout<< n <<' ';std::cout<<'\n';   std::cout<<"Диапазонный for по списоку-инициализации-в-фигурных-скобках: \n";   for(int x :{-1, -2, -3})// правило для auto делает этот диапазонный for работающимstd::cout<< x <<' ';std::cout<<'\n';   auto al ={10, 11, 12};// специальное правило для auto   std::cout<<"Список, связанный с auto, имеет size() = "<< al.size()<<'\n';   // templated_fn({1, 2, 3}); // ошибка компилятора! "{1, 2, 3}" это не выражение,// у него нет типа, и поэтому T не может быть выведен templated_fn<std::initializer_list<int>>({1, 2, 3});// OK templated_fn<std::vector<int>>({1, 2, 3});// также OK}

Вывод:

сконструирован из 5-элементов списка Размер вектора теперь 8 int‘ов: 1 2 3 4 5 6 7 8 Диапазонный for по списоку-инициализации-в-фигурных-скобках: -1 -2 -3 Список, связанный с auto, имеет size() = 3

[править]Отчёты о дефектах

Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:

Номер Применён Поведение в стандарте Корректное поведение
LWG 2129 C++11 std::initializer_list может иметь явную или частичную специализацию программа в этом случае некорректна

[править]Смотрите также

(C++20)
не владеющее представление непрерывной последовательности объектов
(шаблон класса)[править]
строковое представление только для чтения
(шаблон класса)[править]
close