Bo2SS

Bo2SS

有效的C++阅读分享

條款 1:視 C++ 為一個語言聯邦#

除了過程、對象、模板、函數四種編程範式,還有元編程形式,其可包括在泛型編程裡,即模板;STL 就是元編程的一個典範

  • 可體會學習 C++ 的方法

條款 2:盡量以 const/enum/inline 替換 #define#

能不用 #define 就不用,為了方便調試;而用 define 容易掩蓋錯誤,因為所有宏對編譯器不可見

  1. 對於單純常量,最好用 const 對象或者 enums
  2. 對於形似函數的宏,最好用 inline 函數

條款 3:盡可能使用 const#

數據意義上的 const VS. 邏輯意義上的 const

  • 編譯器強制實施前者,我們編寫程序時使用後者
  • 前者:真正數據意義上的 const 是很難實現的,涉及到指針,可能通過其他方式改變數據
  • 後者:核心的數據沒變,就可以認為是邏輯意義上的 const

PS:const 對象和方法

image-20210707184228548
  • const 對象:不能調用非 const 方法,因為非 const 方法內的變量可能發生改變
  • const 方法
    • 內部是不能修改成員屬性的
    • mutable 變量:邏輯上的 const,雖然變量可改變,但不是核心數據

條款 4:確定對象被使用前已經先被初始化#

1、手動初始化內置型對象

  • C++ 並不保證會初始化內置型對象

2、構造函數的賦值最好使用初始化列表

image-20210707184301293
  • 初始化列表調用的是構造函數
    • 構造函數和賦值運算符在 C++ 中完全是兩個概念
    • 構造函數主要負責對象初始化
  • 初始化列表(初值列)列出的成員順序應該與它們在類內聲明的順序一致
    • 所見順序即實際順序,方便維護
    • 即使反著寫,程序還是按照聲明順序初始化變量
  • 減少 “跨編譯單元之初始化次序” 問題,以 local static 對象替換 non-local static 對象
    • 盡量跨文件初始化的依賴關係

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。