任何不修改資料成員的函數,皆應宣告為 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-1 | 正確性、可靠性、健壯性、可讀性優先,滿足前提下再談效能 |
| 規則 11-2-2 | 全域效能 (架構、演算法) > 局部效能 (指令微調) |
| 規則 11-2-3 | 先找瓶頸 (Profiler),別在無關緊要處優化 |
| 規則 11-2-4 | 先優化資料結構與演算法,再優化執行碼 |
| 規則 11-2-5 | 時空權衡:有時多花記憶體換速度 (如查找表、快取) |
| 規則 11-2-6 | 別追求「緊湊代碼」,緊湊 ≠ 高效機器碼,反而礙閱讀 |
== vs =、&& vs &、>= vs >),編譯器不一定能捕捉。