Effective C 學習記錄

2021-07-03 23:52:58 字數 1145 閱讀 2665

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 中沒有統一的準則,要按照不同的特性採取不同的使用...