首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

高品質 C++/C 程式設計指南 第 11 章 (下):const 成員函數與效能優化鐵律

     編輯:關於C++

11.1.3 const 成員函數:編譯期的只讀契約

任何不修改資料成員的函數,皆應宣告為 const。編譯器將強制檢查:

  • 函數體內嘗試修改資料成員 → 編譯錯誤。
  • 呼叫非 const 成員函數 → 編譯錯誤。
class Stack {
public:
    int GetCount() const; // 承諾不修改狀態
private:
    int m_num;
    int m_data[100];
};

int Stack::GetCount() const {
    ++m_num;      // ❌ 編譯錯誤:修改資料成員
    Pop();        // ❌ 編譯錯誤:呼叫非 const 函數
    return m_num; // ✅ 唯讀存取合法
}

const 置於參數列後方:int GetCount() const; —— 因為其他位置已被佔用(語法歷史遺留)。

11.2 效能優化:全域觀優於局部微調

原則核心內容
規則 11-2-1正確性、可靠性、健壯性、可讀性優先,滿足前提下再談效能
規則 11-2-2全域效能 (架構、演算法) > 局部效能 (指令微調)
規則 11-2-3先找瓶頸 (Profiler),別在無關緊要處優化
規則 11-2-4先優化資料結構與演算法,再優化執行碼
規則 11-2-5時空權衡:有時多花記憶體換速度 (如查找表、快取)
規則 11-2-6別追求「緊湊代碼」,緊湊 ≠ 高效機器碼,反而礙閱讀

11.3 實戰建議精選

  • 建議 11-3-1:警惕視覺相似運算子誤寫(== vs =、&& vs &、>= vs >),編譯器不一定能捕捉。
  • 建議 11-3-2:變數/指標/陣列建立後立即初始化,防未初始化當右值用。
  • 建議 11-3-3:留意初值、預設值錯誤與精度不足。
  • 建議 11-3-4:顯式轉型 (static_cast 等),拒絕編譯器悄悄隱式轉換。
  • 建議 11-3-5:防上溢/下溢、陣列越界。
  • 建議 11-3-6:錯誤處理碼不可缺失,且本身要正確。
  • 建議 11-3-7:檔案 I/O 錯誤處理。
  • 建議 11-3-8:避免花俏技巧代碼,清晰優於聰明。
  • 建議 11-3-9:別設計面面俱到的資料結構,YAGNI 原則。
  • 建議 11-3-10:好代碼重構複用,爛代碼重寫別修補。
  • 建議 11-3-11:優先用標準庫,別重造輪子。
  • 建議 11-3-12:減少硬體/環境強耦合變數。
  • 建議 11-3-13:編譯器警告等級拉最高。
  • 建議 11-3-14:引入 PC-Lint、Cppcheck 等靜態分析工具。

參考經典

  • C++ FAQs (Cline & Lomow)
  • Thinking in C++ (Bruce Eckel)
  • Writing Clean Code (Steve Maguire)
  • Effective C++ (Scott Meyers)
  • C++ Strategies and Tactics (Robert Murray)
  • C Programming FAQs (Steve Summit)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved