当我用花括号替换内部括号时,会得到不同的结果。为什么?
在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
答案 0 :(得分:2)
不,它们是不一样的, if 如果一个类有一个带有std :: initializer_list的构造函数,即使另一个构造函数适合该初始化列表,也会优先调用该构造函数。 std :: vector确实有一个,因此第二个示例创建一个包含[5,0]的列表,而第二个示例包含一个[0,0,0,0,0]的列表。
人们普遍接受,他们把这部分弄糟了,对不起!