国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

續C++ style 筆記

2019-11-11 01:49:15
字體:
來源:轉載
供稿:網友

5.19 auto

vector<string> v;auto s1=v[0]; // 創建一份v[0]const auto& s2=v[0];

優點: C++類型名有時很長的, spare_hash_map<string,int>::iterator iter= m.find(val); 返回類型是不是很難讀啊 不過代碼是可以重構成 auto iter = m.find(val);

auto 只能用在局部變量里,其他地方別用。 auto 和C++11 特性[尾置返回類型 trailing return type] 一起用, 不過后者只能用在lambda表達式里。

5.20 列表初始化

5.21. Lambda 表達式 適當的使用,顯示使用Lambda捕獲,不要使用默認的。 Lambda表達式是創建匿名函數對象的一種簡易途徑,常用于把函數當 做參數傳遞。

std::sort(v.begin(),v.end(),[](int x,int y){ return Weight(x)<Weight(y);});

(polymorhpic wrapper) std::function

優點: 傳函數對象給STL算法,Lambdas 非常方便

缺點: Lambdas 的變量捕獲旁門左道,可能造成懸空指針 層層的嵌套的Lambda的匿名函數難以閱讀。

顯示捕獲 [n](int x) {return x+n;} 這樣讀者更加容易知道n是捕獲值

5.22 模板編程 不要使用復雜的模板編程。

利用C++模板實例化機制是圖靈完備性。可以用來實現編譯時刻 的類型判斷的一系列的技巧。

優點: 模板編程能夠實現非常靈活的類型安全的接口和極好的性能。

5.23 Boost 庫 只使用Boost庫中被認可的庫

什么是Boost庫? Boost庫是一個廣受歡迎的,經過同行鑒定的免費開源的C++庫

6.命名約定

6.1. 通用命名規則

6.3. 類型命名 所有類型命名 —— 類, 結構體, 類型定義 類型名稱的每個單詞首字母均大寫, 不包含下劃線

全局變量:可以用 g_ 或其它標志作為前綴, 以便更好的區分局部變量.

6.5. 常量命名 const int kDaysInAWeek = 7; 6.6. 函數命名 … 7. 注釋 7.2. 文件注釋 在每一個文件開頭加入版權公告, 然后是文件內容描述. 1.版權聲明 (比如, Copyright 2008 Google Inc.) 2.許可證. 為項目選擇合適的許可證版本 (比如, Apache 2.0, BSD, LGPL, GPL) 3.作者: 標識文件的原始作者.

7.3. 類注釋

每個類的定義都要附帶一份注釋, 描述類的功能和用法.

// Iterates over the contens of a GargantuanTable. sample usage// GargantuanTable_Iteratar * iter = table->NewIterator()// for(iter->Seek("foo");!iter->done();iter->Next()){// PRocess(iter->key(),iter->value());//}// delete iter;class GargantuanTable_Iteratar{ ...};

7.4. 函數注釋

函數的輸入輸出. 對類成員函數而言: 函數調用期間對象是否需要保持引用參數, 是否會釋放這些參數. 如果函數分配了空間, 需要由調用者釋放. 參數是否可以為 NULL. 是否存在函數使用上的性能隱患. 如果函數是可重入的, 其同步前提是什么?

// Returns an iterator for this table. It is the client's// responsibility to delete the iterator when it is done with it,// and it must not use the iterator once the GargantuanTable object// on which the iterator was created has been deleted.//// The iterator is initially positioned at the beginning of the table.//// This method is equivalent to:// Iterator* iter = table->NewIterator();// iter->Seek("");// return iter;// If you are going to immediately seek to another place in the// returned iterator, it will be faster to use NewIterator()// and avoid the extra seek.Iterator* GetIterator() const;

注明構造函數對參數做了什么 (例如, 是否取得指針所有權) 以及析構函數清理了什么.

7.5. 變量注釋

7.6 實現注釋

注意 永遠不要 用自然語言翻譯代碼作為注釋. 要假設讀代碼的人 C++ 水平比你高, 即便他/她可能不知道你的用意:

7.7. 標點, 拼寫和語法

7.8. TODO 注釋 對那些臨時的, 短期的解決方案, 或已經夠好但仍不完美的代碼使用 TODO 注釋

7.9. 棄用注釋 通過棄用注釋(DEPRECATED comments)以標記某接口點(interface points)已棄用

8.格式 8.4. 函數聲明與定義

8.5. Lambda 表達式

其它函數怎么格式化形參和函數體,Lambda 表達式就怎么格式化;捕獲列表同理。

若用引用捕獲,在變量名和 & 之間不留空格。 8.10. 指針和引用表達式 句點或箭頭前后不要有空格. 指針/地址操作符 (*, &) 之后不能有空格.

8.13. 變量及數組初始化

用 =, () 和 {} 均可.

8.15. 類格式 訪問控制塊的聲明依次序是 public:, protected:, private:, 每次縮進 1 個空格.

8.17. 名字空間格式化 名字空間 不要增加額外的縮進層次

8.18. 水平留白

9.規則特例


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 西昌市| 芜湖县| 云梦县| 会东县| 藁城市| 峨山| 龙游县| 宁城县| 樟树市| 宜兰市| 兴国县| 广汉市| 肃宁县| 上蔡县| 平江县| 湖南省| 南昌市| 龙井市| 普宁市| 含山县| 合川市| 开化县| 色达县| 卢龙县| 北流市| 广南县| 通化市| 九江县| 上高县| 老河口市| 娱乐| 镇原县| 洛浦县| 禹州市| 囊谦县| 沾益县| 曲沃县| 东港市| 榕江县| 赤水市| 阿尔山市|