谷歌C++ 編碼規範(部分)

參考資料: 谷歌C++ 風格指南

 

一. 頭文件

1. 通常每一個 .cc 文件都有一個對應的 .h 文件. 也有一些常見例外, 如單元測試代碼和只包含 main() 函數的 .cc 文件
2. 所有頭文件都應該使用 #define 來防止頭文件被多重包含. (Windows中很多使用 #pragma once )

二. 命名空間

1. 鼓勵在 .cc 文件內使用命名空間,命名空間將全局作用域細分爲獨立的, 具名的作用域, 可有效防止全局作用域的命名衝突
2. .cc文件裏命名空間中的代碼要頂格,不加縮進
3. 在命名空間的最後註釋出命名空間的名字,並且命名空間內首行和尾行加空行

三. 局部變量

1. 將函數變量儘可能置於最小作用域內, 並在變量聲明時進行顯式初始化

四. 隱式類型轉換

1. 不要定義隱式類型轉換. 對於轉換運算符和單參數構造函數, 請使用 explicit 關鍵字

五. 類

1. 類定義一般應以 public: 開始, 後跟 protected:, 最後是 private:  私有函數和私有數據可分成兩個private部分書寫
2. 類的數據成員都必須是私有的
3. 對於重載的虛函數(或虛析構函數), 使用 override 關鍵字顯式地進行標記

六. 函數

1. 函數的參數順序爲: 輸入參數在先, 後跟輸出參數
2. 指針“*”和引用“&”等修飾符應該靠近變量名
3. 傾向於編寫簡短,凝練的函數(40行內)
4. 所有按引用傳遞的參數必須加上 const,所以函數的輸入參數可以是值參,const引用或指針, 輸出參數一般爲指針,不使用const引用
5. 不建議使用 C++ 異常

七. 命名規則

1. 函數命名, 變量命名, 文件命名要有描述性; 少用縮寫
2. 文件名要全部小寫, 可以包含下劃線 (_) 
3. 內聯函數必須放在 .h 文件中. 如果內聯函數比較短, 就直接放在 .h 中
4. 類型名稱(類、結構體、枚舉等)的每個單詞首字母均大寫, 不包含下劃線: MyExcitingClass, MyExcitingEnum.
5. 變量 (包括函數參數) 和數據成員名一律小寫, 單詞之間用下劃線連接. 類的成員變量以下劃線結尾, 但結構體的就不用
6. 聲明爲 constexpr 或 const 的變量, 或在程序運行期間其值始終保持不變的, 推薦命名時以 “k” 開頭, 大小寫混合:constexpr int kDaysInWeek = 7;
7. 函數名的每個單詞首字母大寫,沒有下劃線. 對於首字母縮寫的單詞, 更傾向於將它們視作一個單詞進行首字母大寫(例如, 寫作 StartRpc() 而非 StartRPC())

八. 註釋規則

1. 使用 // 或 /* */,統一使用其中一種
2. 在每一個文件開頭加入版權公告、許可證、作者等註釋信息
3. 每個類的定義都要附帶一份註釋, 描述類的功能和用法
4. 基本上每個函數聲明處前都應當加上註釋, 描述函數的功能和用途。通常, 函數聲明處的註釋不會描述函數如何工作. 那是函數定義部分的事情
5. 函數定義處的註釋應描述函數大致的實現步驟
6. 每個類數據成員(也叫實例變量或成員變量)和全局變量都應該用註釋說明用途,除非變量名已經足以描述一個變量的用途
7. 註釋以 “.” 結尾

九. 代碼格式

1. 每一行代碼字數應控制在一個範圍
2. 函數的返回類型和函數名應在同一行,如放不下就把形參分行,分行的形參應與第一個形參左對齊(不要求分行後每行只有一個形參)
3. 函數名和其後的左圓括號間沒有空格; 圓括號與參數間沒有空格; 左大括號總在最後一個參數同一行的末尾處, 不另起新行;右圓括號和左大括號間總是有一個空格
4. 條件語句中 if和其後的左圓括號,以及else和其後的左大括號,以及右圓括號和左大括號之間都要加一個空格。 不在圓括號內使用空格
5. 條件語句中 else 要跟 if語句的右大括號處於同一行,並且else前後都要加空格
6. switch語句同 if 一樣,switch和其後的左圓括號,以及右圓括號和其後的左大括號之間都要加一個空格
7. 句點或箭頭前後不要有空格. 指針/地址操作符 (*, &) 之後不能有空格
8. 命名空間內容不縮進

十. 其他

1. 使用 C++ 的類型轉換, 如 static_cast<>(). 不要使用 int y = (int)x 或 int y = int(x) 等C轉換方式
2. 對於迭代器和其他模板對象使用前綴形式的自增(++i), 自減(--i)運算符。對簡單數值 (非對象), 使用前置或後置都可
3. 在任何可能的情況下都要使用 const. (在變量或參數前加 const 用於指明變量值不可被篡改,爲類中的函數加上 const 表明該函數不會修改類成員變量的狀態)(提倡const放在類型之前)
4. 在 C++11 裏,用 constexpr來定義真正的常量,或實現常量初始化。constexpr定義的常量表達式,會在編譯時計算常量表達式結果,可以獲得更好的效率和安全性
5. 整數用 0, 實數用 0.0, 指針用 nullptr 或 NULL, 字符 (串) 用 '\0'

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