Когда я пытался понять различные типы инициализации в современном C ++, я столкнулся с инициализацией std::vector<T>
со списком инициализации. Чтобы разрешить инициализацию с помощью структуры данных списка инициализаторов, такой как std::vector<T>
, должен быть конструктор, который принимает инициализатор в качестве параметра. Я заметил, что std::vector<T>
принимает список инициализаторов по копии, а не как ссылку, принятие по копии, когда у нас огромное количество элементов, может быть очень дорогим. Почему это так, есть ли какая-то особая причина, по которой список инициализаторов принимает его как копию вместо ссылки?
От https://en.cppreference.com/w/cpp/container/vector/vector
vector( std::initializer_list<T> init, … ); (9) (since C++11)
Почему бы и нет ?
vector( std::initializer_list<T>& init, … );