【陷阱代碼】c++ 第二篇 c++11新特性及偏冷門語法場景 面對審查代碼

很遺憾,原始代碼未仔細整理,只留有分享給別人的截圖,來源於學習c11時的構想



陷阱點:

1、lamda[i]傳值是隻讀複製,不能改,++無效,要用i+1

2、如果加了mutable之後,是可以改了,但改的是副本

3、如果用了引用,lamda內部會改這個值,而且lamda調用是回調,可能有非順序的時序(多線程環境)或者複雜的流程順序,使分析不清楚i的值

建議:lamda捕獲外部變量避免寫操作,必要時,外部調用也要同步爲宜,也就是等着lamda調用結束。



這裏就是介紹了多種可調用對象以及如何統一管理,統一轉換爲std::function



explicit隱式轉換聲明加上,避免隱式轉換



輸出一個是6,一個是7,也就是函數默認參數如果不一致,即使聲明瞭虛函數覆蓋了,也會使用不同的默認值



名稱覆蓋,純函數名,不含參數,重載也無效,在從重繼承之下,容易出現,比如id name、deal等不帶有具體差異化操作的接口上




聲明虛函數導致移動拷貝無效,要避免。但實際中使用的類,基本都需要析構。所以要合理設計,使複製較慢的類避免拷貝。



模板返回類型依賴參數時,是無法定義返回類型的,之前的做法多指向基類或void*,新特性的尾置返回類型解決了這個問題

-> 後面表示返回類型,通過decltype獲取,獲取的是 引用類型,通過std::remove_refercence去除引用



可以傳遞數組引用了,注意,函數內獲取sizeof(arr)返回指針已經不再絕對成立了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章