c 中為什麼push back 1,2 可以,emplace back 1,2 會報錯

時間 2021-05-10 09:48:26

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

);// 然後就行了

C 中vector用push back更好還是直接規定起始大小更好?

exiledkingcc 對於T int,push back要慢一些。第一種,開優化很容易優化成simd指令。而用push back,每次要修改end指標,不能優化為simd指令。至於開始初始化的開銷,可以看作是在賦值裡面進行初始化的。也就是第一種方式是兩次賦值,對比push back一次呼叫。但是...

iphone12為什麼還是不用C口

Harry Zhu 我曾在很久前的乙個答案中提到 為什麼 USB 介面設計之初選擇了不能正反插的方案?相對而言,像我這種傻大黑粗的莽漢就不太喜歡type c這種介面,因為太精細,容易壞 掉地上一腳下去拿起來就插不進去了 掉茶杯裡,拿紙巾吸水半天你也不敢直接就插因為水吸沒吸乾不知道 而我些罕的ligh...

C 中為什麼要有allocator類?

Wu Jarvis 我是這麼理解的 其實你只要分清vector中resize,reserve的關係就能明白了,resize時,當元素數量 capacity時不但會分配空間,而且會初始化元素 reserve只會做分配空間的事情,不會做初始化,這樣就把分配空間和初始化的事情分開來了,如果不分開的話,那麼...