強烈推薦林銳博士《高質量 C++/C 編程指南》,百頁精華,受益匪淺。以下為個人閱讀精華整理。
extern 置於變量/函數前,聲明其定義在別處,提示編譯器鏈接時去其他模塊尋找。
if/for/while/do 獨佔一行,執行語句不緊跟其後,無論多少語句都要加 {},防書寫失誤。const、if、for 等),函數名後不留空格(緊跟 ()。, ; 後留空格;二元運算符(= + - * / % && || << ^ 等)前後加空格;一元運算符前後不加。[] . -> 等操作符前後不加空格。for/if 語句為緊湊可適當減少空格。行長控制在 70-80 字符。在低優先級運算符處換行,運算符置於新行行首,新行適當縮進。
private 數據在前,public 函數在後,關注內部結構。public 接口在前,private 數據在後,關注提供何種服務。建議採用此方式。AddChild),Unix 用 snake_case(add_child),嚴禁混用。Value1),除非邏輯確需編號。s_。g_。m_,避免與參數同名。if 語句技巧==/!= 比較。用 fabs(x) <= EPSILON 判斷近似相等。if (NULL == p),若誤寫 = 編譯器報錯(NULL 不可賦值)。if/else/return 組合優化:if (cond) return x; else return y;if (cond) return x; return y; 或三元運算符 return cond ? x : y;switch/gotofor > while > do。提高效率核心是降低循環體複雜度。switch 必保留 default: break;,防他人誤以為遺漏。goto 主張少用、慎用,非禁用。const vs #defineconst 有類型,編譯器類型檢查;#define 純文本替換,無類型檢查,易產生邊際效應。const 常量,不可調試宏常量。const,不用宏常量。const 數據成員僅在對象生存期內為常量,類層面可變(不同對象值可不同)。
錯誤:類聲明中初始化 const int SIZE = 100;(對象未創建時編譯器不知值)。
正確:構造函數初始化列表初始化:A(int size) : SIZE(size) {}。
若需整個類共享的編譯期常量,用 enum:enum { SIZE1 = 100, SIZE2 = 200 };。
優點:不佔對象存儲、編譯期求值。缺點:隱含類型為整數,無法表示浮點數(如 PI)。