我看到很多不同的地方統一初始化是recommended。草藥Sutter recommends它,並給出了當不是使用它的列表。看來普遍的共識是使用這種語法。爲什麼建議統一初始化(使用大括號初始化)?
但是,我不明白爲什麼。它有std::initializer_list
優先。將一個std::initializer_list
添加到類中可能會破壞代碼。使用模板時,不建議使用。它似乎比「舊」的方式有更多的例外。舊的方式都不存在這些問題。
我看不出爲什麼統一初始化更好。我的結論是繼續使用()
語法,並在當我想調用構造與std::initializer_list
的情況下使用{}
只。
爲什麼?統一初始化給了什麼?
- 禁止縮小:很好的功能。但是,由於我縮小了警告,所以我的代碼打開了全部(因爲我想知道我的代碼中的所有縮小,而不僅僅是初始化),所以我不需要太多這個功能。
- 最令人頭疼的解析:是的,這是一個問題,但我非常少見。所以這不是一個理由(對我來說)切換。這個地方,我可以用
{}
。 - 還有什麼(也許,我還在學習C++的新功能)?
隨着「老」的方式,沒有規則要記住,沒有可能的破解代碼。只要使用它,有時候,非常非常罕見的是,您會遇到最令人頭疼的解析。就這樣。
我的思維錯了嗎?
它有助於瞭解什麼是功能,什麼是對象。 'f(g(),h(j,i));'不如'f(g {},h(i,j));'清楚。當變量具有專有名稱時,這仍然很重要。 – nwp
@nwp:yepp,這是一個有效的論點。但是,我有一個命名約定,我可以立即看到類型。此外,當前良好的IDE可以通過某種方式(着色,斜體,無論)顯示它們之間的差異。 – geza
您的命名約定不會被STL或其他各種庫所遵循。但是,當然,如果用一些外部工具替換支撐初始值設定項的大部分功能並單獨工作,或者強迫您周圍的人做同樣的事情,則不需要它們。並非每個C++功能對每個人都有意義。 – nwp