使用大括号初始化 std::vector 使用初始值设定项列表

Initializing std::vector with curly braces uses initializer list

本文关键字:列表 vector 初始化 std      更新时间:2023-10-16

当我用大括号替换内部括号时,我得到不同的结果。为什么?

C++11之后它们不是等效的吗?(除了防止整数降级( 为什么它会改变结构:

std::vector(size_type count, const T& value = T(), const Allocator& alloc = Allocator());相比

std::vector(std::initializer_list<T> init, const Allocator& alloc = Allocator());

auto th_buckets = std::vector<std::vector<int>>{2, std::vector<int>(5, 0)};
0 0

0 0 0

0 00 0 0

auto th_buckets = std::vector<std::vector<int>>{2, std::vector<int>{5, 0}};

5 0

5 0

不,它们不一样,如果一个类有一个构造函数采用 std::initializer_list,即使另一个构造函数适合初始化列表,也会优先调用。 std::vector 确实有一个,所以第二个示例创建一个包含 [5,0] 的列表,而第二个示例包含一个列表 [0,0,0,0,0]。

人们普遍认为他们搞砸了这部分,对不起!

相关文章: