1.以by value 傳遞使用者自定義型別通常是個壞主意,pass-by-reference-to-const往往是比較好的選擇
一、讓自己習慣c++
條款02:盡量以const,enum,inline替換#define
(1)對於單純常量,最好以const物件或enums替換#defines。
示例:#define aspect_batio 1.653
改為const double aspectratio 1.653;
好處:作為乙個語言常量,aspectratio 會被編譯,會進入記號表內。使用常量可能比使用#define導致較小量的目標碼。
(2)對於形似函式的巨集(macros),最好改用inline函式替換#defines
示例:#define call_with_max(a,b) f((a)>(b)?(a):(b))
改為:template
inline void callwithmax(const t&a,const t& b)
f(a>b ? a:b);
好處:更加可預料,更加型別安全
條款03:盡可能使用const
(1) 將某些東西宣告為const可幫助編譯器偵測出錯誤用法。const可被施加於任何作用域內的物件、函式引數、函式返回型別、成員函式本體。
(2) 編譯器強制實施bitwise constness,但你編寫程式時應該使用「概念上的常量性」(conceptual constness)
(3) 當const和non-const成員函式有著實質等價的實現時,令non-const版本呼叫const版本可避免**重複。
條款04:確定物件被使用前已先被初始化
c++成員初始化次序:base classes 更早於其derived classes 被初始化,而class的成員變數總是以其宣告次序被初始化。
(1) 為內建型物件進行手工初始化,因為c++不保證初始化它們。
(2) 建構函式最好使用成員初值列(member initialization list),而不要在建構函式本體內使用賦值操作(assignment)。初值列
列出的成員變數,其排列次序應該和它們在class中的宣告次序相同。
(3) 為免除「跨編譯單元之初始化次序」問題,請以local static物件替換non-local static 物件。
Effective C 閱讀記錄 前言(1
定義的本質 object 物件 的定義給編譯器提供配置記憶體的地點說明。function 函式 或者function template 函式模板 定義式為編譯器提供函式本體 function body 物件陣列的初始化c array 10 default constructor 無需任何引數 arg...
Effective C 學習筆記
學習effective c 已經有相當長的一段時間了,今天抽出時間又堵了一遍第一部分 c語言 c 以c語言為基礎,幾乎支援所有的c語言成分,例如區塊 語句 預處理 內建資料型別 陣列 指標等,c語言的侷限是 沒有模板 沒有異常 沒有過載 物件導向的c 也就是加上了物件特性的c,類 封裝 繼承 多型 ...
Effective C 學習筆記
1 c 是乙個複合式的語言 c 中不同部分有著不同的語言特性,例如 1.1 在c中傳遞形參時,按照值傳遞比按照指標傳遞效率更高 1.2 在物件導向程式中,物件要按照const引用而不是按照值傳遞 1.3 在stl程式設計中採取按照值傳遞方式 所以說c 中沒有統一的準則,要按照不同的特性採取不同的使用...