一:代碼規範 參考 :https://zh-google-styleguide.readthedocs.io/en/latest/google-cpp-styleguide/headers/# 1 . 頭文件 1.1. Self-contained 頭文件 頭文件應該能夠自給自足(self-cont ...
一:代碼規範
參考 :https://zh-google-styleguide.readthedocs.io/en/latest/google-cpp-styleguide/headers/#
1 . 頭文件
1.1. Self-contained 頭文件
頭文件應該能夠自給自足(self-contained,也就是可以作為第一個頭文件被引入),以 .h
結尾。至於用來插入文本的文件,說到底它們並不是頭文件,所以應以 .inc
結尾。不允許分離出 -inl.h
頭文件的做法.
1.2. #define 保護
所有頭文件都應該使用 #define
來防止頭文件被多重包含, 命名格式當是: <PROJECT>_<PATH>_<FILE>_H_
.
1.3. 前置聲明
儘可能地避免使用前置聲明。使用 #include
包含需要的頭文件即可。
1.4. 內聯函數
只有當函數只有 10 行甚至更少時才將其定義為內聯函數.
1.5. #include 的路徑及順序
使用標準的頭文件包含順序可增強可讀性, 避免隱藏依賴: 相關頭文件, C 庫, C++ 庫, 其他庫的 .h, 本項目內的 .h.
2 . 作用域
2.1. 命名空間
鼓勵在 .cc
文件內使用匿名命名空間或 static
聲明. 使用具名的命名空間時, 其名稱可基於項目名或相對路徑. 禁止使用 using 指示(using-directive)。禁止使用內聯命名空間(inline namespace)。
2.2. 匿名命名空間和靜態變數
在 .cc
文件中定義一個不需要被外部引用的變數時,可以將它們放在匿名命名空間或聲明為 static
。但是不要在 .h
文件中這麼做。
2.3. 非成員函數、靜態成員函數和全局函數
使用靜態成員函數或命名空間內的非成員函數, 儘量不要用裸的全局函數. 將一系列函數直接置於命名空間中,不要用類的靜態方法模擬出命名空間的效果,類的靜態方法應當和類的實例或靜態數據緊密相關.
2.4. 局部變數
將函數變數儘可能置於最小作用域內, 併在變數聲明時進行初始化.
2.5. 靜態和全局變數
禁止定義靜態儲存周期非POD變數,禁止使用含有副作用的函數初始化POD全局變數,因為多編譯單元中的靜態變數執行時的構造和析構順序是未明確的,這將導致代碼的不可移植。
3.類
3.1. 構造函數的職責
不要在構造函數中調用虛函數, 也不要在無法報出錯誤時進行可能失敗的初始化.
3.2. 隱式類型轉換
不要定義隱式類型轉換. 對於轉換運算符和單參數構造函數, 請使用 explicit
關鍵字.
3.3. 可拷貝類型和可移動類型
如果你的類型需要, 就讓它們支持拷貝 / 移動. 否則, 就把隱式產生的拷貝和移動函數禁用.
3.4. 結構體 VS. 類
僅當只有數據成員時使用 struct
, 其它一概使用 class
.
3.5. 繼承
使用組合 (YuleFox 註: 這一點也是 GoF 在 <<Design Patterns>> 里反覆強調的) 常常比使用繼承更合理. 如果使用繼承的話, 定義為 public
繼承.
4.格式
4.1. 行長度
每一行代碼字元數不超過 80.
4.2. 條件語句
傾向於不在圓括弧內使用空格. 關鍵字 if
和 else
另起一行.
舉例:if (condition) {
4.3. 布爾表達式
如果一個布爾表達式超過標準行寬, 斷行方式要統一 一下.
如:if (..... &&
..... &&
.....) {
....
}
4.4. 函數聲明與定義
註意以下幾點:
- 使用好的參數名.
- 只有在參數未被使用或者其用途非常明顯時, 才能省略參數名.
- 如果返回類型和函數名在一行放不下, 分行.
- 如果返回類型與函數聲明或定義分行了, 不要縮進.
- 左圓括弧總是和函數名在同一行.
- 函數名和左圓括弧間永遠沒有空格.
- 圓括弧與參數間沒有空格.
- 左大括弧總在最後一個參數同一行的末尾處, 不另起新行.
- 右大括弧總是單獨位於函數最後一行, 或者與左大括弧同一行.
- 右圓括弧和左大括弧間總是有一個空格.
- 所有形參應儘可能對齊.
- 預設縮進為 2 個空格.
- 換行後的參數保持 4 個空格的縮進.
5. 註釋
5.1. 類註釋
每個類的定義都要附帶一份註釋, 描述類的功能和用法, 除非它的功能相當明顯.
5.2. 實現註釋
對於代碼中巧妙的, 晦澀的, 有趣的, 重要的地方加以註釋.
二、《數學之美系列十三 — 信息指紋及其應用》 讀後感
任何一段信息文字,都可以對應一個不太長的隨機數,作為區別它和其他信息的指紋。這種映射真是太美妙了,把一個一百多個字元的網址隨機地映射到128二進位位的正數中,這樣子處理後就可以把存儲網址的記憶體需求量從原來的一百多個位元組轉變成16個位元組,而這種產生隨機數的演算法,是其中的核心。數學的加減乘除,只要按照一定的規則處理,就可以形成一種好的映射,讓信息指紋不可逆,更好地保障了用戶的安全。學好數學,靈活運用數學規律,可以幫助我們更好地解決現實中的問題。