使用花括号初始化std :: vector使用初始化程序列表

时间:2020-01-28 22:01:59

标签: c++ c++11 vector constructor

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

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 0 0 0 0

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

5 0

5 0

1 个答案:

答案 0 :(得分:2)

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

人们普遍接受,他们把这部分弄糟了,对不起!

相关问题