簡體   English   中英

用花括號初始化 std::vector 使用初始化列表

[英]Initializing std::vector with curly braces uses initializer list

當我用花括號替換內部括號時,我得到了不同的結果。 為什么?

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

不,它們不一樣,如果一個類有一個采用 std::initializer_list 的構造函數,即使另一個構造函數適合初始化列表,也會優先調用它。 std::vector 確實有一個,因此第二個示例創建一個包含 [5,0] 的列表,而第二個示例包含一個 [0,0,0,0,0] 的列表。

人們普遍認為他們把這部分搞砸了,對不起!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM