1. 程式人生 > >C++程式設計規範 1-3章

C++程式設計規範 1-3章

第1章 命名原則

1.型別名:每個英文單詞的第一個字母大寫,其他小寫,最後以_T結尾。

class PageCode_T
{
	//...
};

原因:

  1. 防止與變數名衝突
  2. 使得型別名更加清晰
  3. 區分名字中各單詞也可以用下劃線
  4. 縮寫字當作普通字處理
  5. 因為namespace是表示一個邏輯組,與class和enum的某些用法類似,所以採用同樣的命名原則

1.2 關於變數和函式名:首字母小寫,其後每個單詞的第一個字母大寫。

int lengthAndWidth(void) const;

1.3 全大寫的函式名(建議):呼叫普通函式的函式

  1. 閱讀簡潔
  2. 跟原函式只有大小寫的區別
  3. 效率高,可用inline方式實現這類函式

1.4關於巨集,常量和模板名:全部大寫,如有多個單詞,用下劃線分隔。

#define PI 3.1415926
enum{BLUE,RED,WHITE};
template<class TYPE>
class List_T
{
	//...
};

1.5關於指標識別符號名:建議以p開頭或以Ptr結尾

char *pName;

1.6關於變數名字首:
i_ 類內資料成員 instance scope
c_ 類內靜態資料成員 class scope
g_ 全域性變數 global scope
f_ 檔案作用域變數 file scope

1.7減少匿名名稱空間級識別符號:可以歸類放在某個名稱空間、類或函式中
原因:

  1. 明顯減少命名衝突
  2. 歸類後使用更清晰
  3. 縮短生命週期

1.8名字要本著清楚、簡單的原則:幫助對程式碼的理解

int returnStatus;
int alarmNumber;

1.9關於函式的左值和右值引數名:用lhs做左值引數的名字,用rhs做右值引數的名字

int operator=(String const &lhs,String const &rhs);

第2章 型別的使用

1.避免隱式宣告型別

main();		//int main(void)
void foo(const aValue);		//void foo(const int aValue);

2.慎用無符號型別:不同的C++標準中有符號和無符號的轉換規則不同

3.少用浮點數除非必須

  1. 浮點數不精確
  2. 浮點數的異常處理複雜
  3. 運算速度慢

4.用typedef簡化程式中的複雜語法

5.少用union

6.慎用位操作

  1. 效率低下
  2. 可能帶來相容性問題

7.用enum取代常量

  1. 易於維護
  2. 比#define或 int const更安全
  3. 在類中使用更方便
  4. 減少匿名名稱空間級變數、常量、巨集及函式

8.使用內建bool型別:只有true和false

9.儘量用引用取代指標

  1. 被引用的物件永遠不可能是空
  2. 引用某一個物件後不會再去引用其他物件
  3. 某些operator函式的返回值
  4. 函式的引數傳遞

第3章 函式

1.函式原型宣告放在一個頭檔案中

2.函式無引數一定要用void標註

3.對於內建型別引數應傳值

4.對於非內建型別引數應傳遞引用或指標

  1. 不用拷貝
  2. 不用構造和析構
  3. 有利於非內建型別的擴充
  4. 有利於函式支援派生類

5.何時用指標傳遞引數:取捨的關鍵是:NULL是否是一個合法的取值

  • 函式內部將自己的引數以指標形式傳給其他的函式
  • 若引數是被new出來的,且將要在函式內被釋放

6.避免使用引數不確定的函式:可以使用過載和鏈式函式

7.若不得不使用引數不確定的函式,用<stdarg.h>提供的方法

va_list
va_start
va_end

8.避免函式的引數過多

9.儘量保持函式只有一個出口

10.(非void)任何情況都要有返回值

11.返回指標型別的函式應該用NULL表示失敗

12.禁止成員函式返回成員(可讀寫)的引用或指標

13.重複使用的code用function代替

14.虛友元函式:把友元函式定義成虛擬函式,子類繼承該友元介面而無需重複宣告友元