c++ - 为什么 std::vector 构造函数通过复制接受初始值设定项列表?

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

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

最佳答案

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

尽你所能read here :

Copying a std::initializer_list does not copy the underlying objects.

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

关于c++ - 为什么 std::vector 构造函数通过复制接受初始值设定项列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60614963/

相关文章:

c++ - 用 C++ 思考(第 1 卷)Ch-12 Q-21

c++ - 我正在创建一个函数类型程序,并且不会停止说 : (. text+0xe0): undefined reference to

c++ - const 临时类型的最佳实践

c++ - 如果将 Memoization 添加到 Recursion,则错误的解决方案

c++ - 关于数学和编程的问题

c++ - 析构函数的使用 = 删除;

windows - 免费的 Windows 64 位 C++11 编译器

c++ - 如果可能,取消对 C++ 类型指针的引用

C++错误的构造函数被调用

c++ - 如何创建不同原型(prototype)的函数指针数组?