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

C++ 進階編程經驗(二):效率優化原則與 14 條實戰防錯清單

     編輯:VC 教學

11.1.3 const 成員函式

任何**不修改資料成員**的函式都應宣告為 const 型別。撰寫 const 成員函式時若誤修改資料成員或呼叫非 const 成員函式,編譯器將報錯,無疑提升健壯性。


class Stack {
public:
    void Push(int elem);
    int Pop();
    int GetCount() const; // 僅計數,邏輯上應為 const
private:
    int m_num;
    int m_data[100];
};

int Stack::GetCount() const {
    ++m_num;    // 編譯錯誤:企圖修改資料成員
    Pop();      // 編譯錯誤:企圖呼叫非 const 函式
    return m_num;
}

const 關鍵字只能放在函式宣告尾部(因其他位置已被佔用)。

11.2 提升程式效率

  • 時間效率:執行速度;空間效率:記憶體/外部儲存佔用。
  • 全域效率:系統整體角度;局部效率:模組/函式角度。

效率優化六大鐵律

  1. 規則 11-2-1:不一味追求效率,在正確性、可靠性、健壯性、可讀性滿足前提下優化。
  2. 規則 11-2-2:以全域效率為主,局部效率為輔。
  3. 規則 11-2-3:先找出限制效率的瓶頸,勿在無關緊要處優化。
  4. 規則 11-2-4:先優化資料結構與演算法,再優化執行程式碼。
  5. 規則 11-2-5:時間/空間效率有時對立,分析何者重要,作適當折衷(如多花記憶體換效能)。
  6. 規則 11-2-6:不追求緊湊程式碼,緊湊碼不等於高效機器碼。

11.3 十四條實戰防錯建議

  1. 建議 11-3-1:當心視覺上難辨識的運算子寫錯(== 誤寫 =,|| 少一竿等),編譯器不一定能自動偵測。
  2. 建議 11-3-2:變數(指標、陣列)建立後**及時初始化**,防未初始化變數當右值用。
  3. 建議 11-3-3:當心變數初值/預設值錯誤、精度不足。
  4. 建議 11-3-4:當心資料型別轉換錯誤。盡量用顯式轉換(讓人知發生何事),避免編譯器悄悄隱式轉換。
  5. 建議 11-3-5:當心變數上溢/下溢、陣列下標越界。
  6. 建議 11-3-6:當心忘寫錯誤處理、錯誤處理本身有誤。
  7. 建議 11-3-7:當心檔案 I/O 錯誤。
  8. 建議 11-3-8:避免撰寫高技巧性程式碼。
  9. 建議 11-3-9:別設計面面俱到、過度靈活的資料結構。
  10. 建議 11-3-10:原碼品質好則盡量復用;品質差則**重寫**,勿修補。
  11. 建議 11-3-11:盡量用標準庫函式,別「發明」已存在的輪子。
  12. 建議 11-3-12:盡量不用與特定硬體/軟體環境緊耦合的變數。
  13. 建議 11-3-13:編譯器警告等級設為**最嚴格**。
  14. 建議 11-3-14:可能的話,用 PC-Lint、LogiScope 等工具程式碼審查。

參考文獻

  • [Cline] C++ FAQs
  • [Eckel] Thinking in C++
  • [Maguire] Writing Clean Code
  • [Meyers] Effective C++
  • [Murry] C++ Strategies and Tactics
  • [Summit] C Programming FAQs
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved