1樓:邱昊宇
因為 本身什麼都不是,而你以為它是 std::initializer_list。
它變身 std::initializer_list是有條件的:要麼是你在用 auto 推導這玩意兒的型別,要麼是你在做某種函式呼叫並且被呼叫的函式以 std::
initializer_list 作為引數。
而這裡的 emplace_back 本身是個模板,所以就形成了乙個死鎖的局面:
emplace_back 例項化出接受 std::initializer_list 的版本的前提是 變身
變身的前提是 emplace_back 例項化出接受 std::initializer_list 的版本
反正……就是失敗了……
// 手動構造乙個 initializer_list 是可以的a.
emplace_back
(std
::initializer_list
);// 手動指定模板引數型別,放棄自動推導 emplace_back 也是可以的
// 這樣 看見這個函式的引數是 initializer_list,就會觸發變身a.
emplace_back
initializer_list ();autox= ;// 或者利用遊戲規則先得到 initializer_lista. emplace_back(x );// 然後就行了 exiledkingcc 對於T int,push back要慢一些。第一種,開優化很容易優化成simd指令。而用push back,每次要修改end指標,不能優化為simd指令。至於開始初始化的開銷,可以看作是在賦值裡面進行初始化的。也就是第一種方式是兩次賦值,對比push back一次呼叫。但是... Harry Zhu 我曾在很久前的乙個答案中提到 為什麼 USB 介面設計之初選擇了不能正反插的方案?相對而言,像我這種傻大黑粗的莽漢就不太喜歡type c這種介面,因為太精細,容易壞 掉地上一腳下去拿起來就插不進去了 掉茶杯裡,拿紙巾吸水半天你也不敢直接就插因為水吸沒吸乾不知道 而我些罕的ligh... Wu Jarvis 我是這麼理解的 其實你只要分清vector中resize,reserve的關係就能明白了,resize時,當元素數量 capacity時不但會分配空間,而且會初始化元素 reserve只會做分配空間的事情,不會做初始化,這樣就把分配空間和初始化的事情分開來了,如果不分開的話,那麼...C 中vector用push back更好還是直接規定起始大小更好?
iphone12為什麼還是不用C口
C 中為什麼要有allocator類?