Почему доступ к std::initializer_list
не позволяет нам изменять его содержимое? Это большой недостаток std::initializer_list
при его использовании для его основной цели (для инициализации контейнера), поскольку он использует избыточное копирование/копирование, вместо move-construction/move-assign.
#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 &)
Почему его конструкция настолько ограничена?