std::initializer_list
Материал из cppreference.com
![]() |
Эта страница была переведена автоматически с английской версии вики используя Переводчик Google.
Перевод может содержать ошибки и странные формулировки. Наведите курсор на текст, чтобы увидеть оригинал. Вы можете помочь в исправлении ошибок и улучшении перевода. Для инструкций перейдите по ссылке. Щёлкните здесь, чтобы увидеть английскую версию этой страницы |
Defined in header <initializer_list>
|
||
template< class T > class initializer_list; |
(начиная с C++11) | |
объект типа
std::initializer_list<T>
это легкий объект прокси-сервер, который обеспечивает доступ к массиву объектов типа T
, выделенных реализации в неопределенных хранения (который может быть автоматическим, временные, или статический только для чтения памяти, в зависимости от ситуации )Оригинал:
An object of type
std::initializer_list<T>
is a lightweight proxy object, which provides access to an array of objects of type T
, allocated by the implementation in unspecified storage (which could be automatic, temporary, or static read-only memory, depending on the situation)Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Этот массив инициализируется и
std::initializer_list
объект построен, когда приготовился-Init-лист используется в Список инициализации, в том числе вызова функции инициализации списка и выражения присваивания (не путать с инициализации конструктора списка), или когда приготовился-Init-лист связан с auto, в том числе в дальнюю цикла.Оригинал:
This array is initialized and a
std::initializer_list
object is constructed when a braced-init-list is used in Список инициализации, including function-call list initialization and assignment expression (not to be confused with инициализации конструктора списка), or when braced-init-list is bound to auto, including in a ranged for loop.Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Initializer список может быть реализован как пара указателей или указателя и длины. Копирование
std::initializer_list
не копирует основные объекты. основной массив не гарантирует существование после жизни оригинального объекта списке инициализаторов закончилось.Оригинал:
Initializer list may be implemented as a pair of pointers or pointer and length. Copying a
std::initializer_list
does not copy the underlying objects. The underlying array is not guaranteed to exist after the lifetime of the original initializer list object has ended.Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
[править] Типы-члены
Тип члена | Определение |
value_type
|
T |
reference
|
const T& |
const_reference
|
const T& |
size_type
|
size_t |
iterator
|
const T* |
const_iterator
|
const T* |
[править] Функции-члены
создает пустой список инициализации Оригинал: creates an empty initializer list Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (public функция-член) | |
Оригинал: Capacity Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. | |
возвращает количество элементов в списке инициализаторов Оригинал: returns the number of elements in the initializer list Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (public функция-член) | |
Оригинал: Iterators Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. | |
возвращает указатель на первый элемент Оригинал: returns a pointer the first element Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (public функция-член) | |
возвращает указатель на следующий за последним элементом Оригинал: returns a pointer to one past the last element Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (public функция-член) |
[править] Функции, не являющиеся членами
Специализируется std::begin Оригинал: specializes std::begin Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (шаблон функции) | |
Специализируется std::end Оригинал: specializes std::end Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (шаблон функции) |
[править] Пример
Запустить этот код
#include <iostream> #include <vector> #include <initializer_list> template<class T> struct S { std::vector<T> v; S(std::initializer_list<T> l) : v(l) { std::cout << "constructed with a " << l.size() << "-element list\n"; } void append(std::initializer_list<T> l) { v.insert(v.end(), l.begin(), l.end()); } std::pair<const T*, size_t> c_arr() const { return {&v[0], v.size()}; // list-initialization in return statement } }; template<typename T> void templated_fn(T) { } int main() { S<int> s = {1,2,3,4,5}; // direct list-initialization s.append({6,7,8}); // list-initialization in function call std::cout << "The vector size is now " << s.c_arr().second << " ints:\n"; for(auto n : s.v) std::cout << ' ' << n; std::cout << '\n'; std::cout << "range-for over brace-init-list: \n"; for(int x : {-1, -2, -3}) // the rule for auto makes this ranged for work std::cout << x << ' '; std::cout << '\n'; auto al = {10, 11, 12}; // special rule for auto std::cout << "The list bound to auto has size() = " << al.size() << '\n'; // templated_fn({1,2,3}); // compiler error! "{1,2,3}" is not an expression, // it has no type, and so T cannot be deduced templated_fn<std::initializer_list<int>>({1,2,3}); // OK templated_fn<std::vector<int>>({1,2,3}); // also OK }
Вывод:
constructed with a 5-element list The vector size is now 8 ints: 1 2 3 4 5 6 7 8 range-for over brace-init-list: -1 -2 -3 The list bound to auto has size() = 3