怎樣從C 11轉型到C 17 20?

時間 2021-05-14 17:59:44

1樓:歐文韜

c++14和c++17基本上增加的都是語法醣類的工具呀。你就自然地用唄,等碰上問題,發現c++17剛好有解決方案的語法糖,誒就看懂了。

2樓:Jason於航

緩和點:先按照 11 和 14 的語法寫,然後再做漸進增強,說白了就是重構。重構遵循從小到大原則,先改小 feature,再考慮大模式。

激進點:直接維基百科了解下 17 的改動,然後新專案選擇性使用。20 的改動主要是 Big Four 比較 radical,依舊還是先了解再用。

但暫時來看能完全用到 17 和 20 特性的專案還不多(只是據我了解,可能並不全面),所以在新特性的用法上有沒有什麼坑需要注意、或者最佳實踐可以利用還是值得考慮的。畢竟曾經基於 11 的特性就衍生出來很多模式。

3樓:一鳴道長

棄暗投明解君憂

4樓:粉蒸排骨

再難、再晦澀的語法,也是人制定的,也是給人看、給人用的。

我一開始接觸「偏特化」、「全特化」、trait、lambda等等概念時,也覺得有點艱深。

無他,各個擊破。從乙個概念、乙個特性著手,乙個個地單獨理解、試驗。

不要一鍋燉!

等每個概念都理解了,再根據需求組合運用。

5樓:XZiar

而且我尋思著C++11到C++17,語法風格上也沒大改啊,怎麼會看不懂。

其中書寫格式發生的大改變我覺得也就這幾個:

constexpr if

if 語句 - cppreference.comstructure binding

結構化繫結宣告 (C++17 起)

CTAD

類模板實參推導(C++17 起)

fold expression

摺疊表示式(C++17 起) - cppreference.com其他的感覺都是庫更新為主。而且前面列出的幾個常不常用還不好說。

按理說不應該看不懂,可能是你看的專案不太對(一些庫級別的專案,別說C++17了,給你C++11甚至C++03都很繞很晦澀),也可能是你對C++11的了解不深(比如知道有lambda,但沒想到lambda遍地開花)。

至於C++20,我覺得目前沒必要趕這個潮流——你用的編譯器特性支援全了嗎……

6樓:裴浩

github 上有人做了 11/14/17/20 的新 feature 列表:

C 11 的move語義,從語言功能正交性來看,是一種必須的語義嗎?

圓形畢露 Move語意不是必須的,它的作用是為了提高程式效率。Move語意和右值有關,在C 11中,編譯器能夠根據函式引數是左值還是右值決定呼叫copy constructor還是move constructor。右值從狹義上說就是沒有identity的表示式,比如匿名物件,通過隱式轉換的物件.這些...

c 11中std unique ptr需要明確知道型別的析構函式,而shared ptr不需要?

土地測量員 詳細講一下std unique ptr的部分吧。std unique ptr需要明確知道型別的析構函式 unique ptr型別是 template class T,class Deleter std default delete class unique ptr private T p...

C 11為什麼引入nullptr?

徐辰 因為C 他爹早就看0這個magic number不爽了,當年沒顧上搞,一直拖到2011年了,再不瘋狂一把C 就沒人用了。 enpeng xu 問題的關鍵是c 不知道怎麼正確做void 到 T 的預設轉換,所以多此一舉的引入了nullptr。某些情況做下c 編譯器不知道怎麼把 void ptr正...