Почему доступ к std::initializer_list
не позволяет нам изменять его содержимое? Это большой недостаток std::initializer_list
при использовании его по его основному назначению (для инициализации контейнера), поскольку его использование приводит к чрезмерному построению-копированию/назначению-копированию вместо построения-перемещения/назначения-перемещения.
#include <initializer_list>
#include <iostream>
#include <vector>
#include <cstdlib>
struct A
{
A() = default;
A(A const &) { std::cout << __PRETTY_FUNCTION__ << std::endl; }
A(A &&) { std::cout << __PRETTY_FUNCTION__ << std::endl; }
A & operator = (A const &) { std::cout << __PRETTY_FUNCTION__ << std::endl; return *this; }
A & operator = (A &&) { std::cout << __PRETTY_FUNCTION__ << std::endl; return *this; }
};
int
main()
{
std::vector< A >{A{}, A{}, A{}};
return EXIT_SUCCESS;
}
Вывод (как и ожидалось):
A::A(const A &)
A::A(const A &)
A::A(const A &)
Почему его конструкция такая ограниченная?
{A{}, A{}, A{}}
создает все содержимое списка инициализаторов на месте. - person Tomilov Anatoliy   schedule 28.11.2014std::initializer_list
для инициализации контейнеров некопируемых объектов. - person Tomilov Anatoliy   schedule 30.11.2014