c項目實戰 cboost線程命名( 二 )


VI 、”為改變思考方式而改變“ 總結: 1、nullptr引入,用單一職責思維,避免NULL存在指針和整型的二義性,nullptr_t類型可以進行賦值到指針和進行比較運算(與指針的) 。2、=default恢復編譯器默認的函數,方便書寫和保證POD類型;=delete指定刪除,方便禁止一些拷貝構造賦值和移動拷貝構造賦值函數,全局和普通函數的某個重載版本也可以禁止 。3、lambda函數編程的引入,注意捕獲列表中傳值和傳引用區別(都是定義初始化仿函數閉包對象,但是&可獲得調用時上下文值,&自定義類型性能更高,但要小心使用) 。在stl仿函數,泛型編程,復雜函數中作為匿名函數廣泛使用 。lambda相比仿函數還是有區別的,只能函數內部初始化和使用,自定義仿函數和普通函數可以在不同作用域初始化和使用,所以使用時候區分就好 。
VII、融入實際應用” 總結: 1、alignas是設置變量的對齊大小,alignof是獲取變量的對齊大小,可以單獨對變量對齊進行設置;stl庫里面的align函數,aligned_storage和aligned_union模板對內存塊進行對齊調整 。2、通用屬性,cpp11引入的[[noreturn]](用在異常,終止,無限循環函數中)和[[carries_dependency]](用在弱內存模型并行編程中)屬性聲明符號 。3、Unicode字符串,1)cpp11中默認的string 是utf8編碼,存儲省空間,增刪查找也是可以的(utf16更加方便些),計算文字數需轉換到u16string 。2)c11對于字符轉換用基于locale的codecvt,也可以直接用wstring_convert配合codecvt_utf8_utf16等直接進行轉換,注意utf16有大小端 。3)輸出時候的一些設置,內部會調用設置相關的函數,cpp98添加了wifstream和wofstream類,但是cpp11沒有u16ifstream和u32ofstream等,需要轉換到更節省的utf8類型 。4)原生字符串字面量,語法R”()”,但是轉義字符不能再使用 。
VIII、c11和boost關系,boost的使用:
你可以大致看下C11比C03多了什么 。那些東西很多都是從boost庫里拉過去的 。主要是智能指針、線程、hash數據結構 。
正則表達式,另外,boost里面還有filesystem我認為比較實用 。
【c項目實戰 cboost線程命名】盡量使用c11,在使用boost可以獲得比較方便的方案時候,可以采用boost,如:filesystem,date_time(其實用cpp11實現也是可以的) 。

推薦閱讀