首页 > 解决方案 > 为什么 std::vector 构造函数通过复制接受初始化列表?

问题描述

当我试图理解现代 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, … );

标签: c++c++11c++14

解决方案


std::initializer_list不复制底层对象。

你可以在这里阅读

复制 astd::initializer_list不会复制底层对象。

所以它并没有真正浪费大量的内存或时间。


推荐阅读