Effective C 學習筆記

2021-06-20 18:31:46 字數 1636 閱讀 9171

1 c++是乙個複合式的語言

c++中不同部分有著不同的語言特性,例如:

1.1 在c中傳遞形參時,按照值傳遞比按照指標傳遞效率更高

1.2 在物件導向程式中,物件要按照const引用而不是按照值傳遞

1.3 在stl程式設計中採取按照值傳遞方式

所以說c++中沒有統一的準則,要按照不同的特性採取不同的使用方式,這也是為什麼c++難的原因

2 盡量以const,enum,inline替換#define

2.1 const用法

2.1.1 以const替換#define。在宣告常量時要用const替換#define,因為#define定義的常量,在有的編譯器中不進入函式表,這樣在編譯的時候就可能出錯

2.1.2 在類中使用靜態的常量時,由於不同的編譯器處理方法不同,因為沒有統一的標準,在編譯出錯時,所以需要嘗試不同的方法,有的在類中宣告時初始化,在類外進行定義,有的類內部宣告時不賦值,但是在類外定義時賦值。

2.1.3 在過載=操作符時,要將返回型別宣告成const,這樣防止兩個左值相加後,再被賦予另乙個值

2.2 enum在類中用法

在類中如果要使用乙個常量宣告乙個陣列時,有的時候編譯器不支援這麼幹,就要用列舉代替靜態變數

2.3 inline用法

巨集的使用帶來了效率,但是有時候會讓人誤解,且會得到異常結果。inline函式在效率上不會比巨集差,又容易理解其中所表達的計算邏輯,其是首選 

3 盡量使用const

在過載運算子時要事返回的結果為const,作用是防止誤操作a+b=c出現

4 在物件被使用之前被初始化

4.1 

c++中c部分的特性和後擴充套件的特性不同,在c中為了保證效能,編譯器不會對內建型別進行初始化,所以c中宣告的陣列就不是初始化為0,而在c++中的型別,如vector就被初始為0。所以c中的內建型別要手動初始化。

4.2 類在例項化時,建構函式中要使用函式的初始化列表,在此要分清賦值和初始化的概念,就知道賦值會導致效能低效,而初始化使得效能變高

5 了解c++類中預設函式

建構函式,析構函式,拷貝建構函式,拷貝賦值函式

6 若不想使用編譯器預設生成的函式就應該明顯拒絕

6.1 為了能將乙個物件賦給另乙個物件,需要實現拷貝建構函式和拷貝賦值建構函式

6.2 有時候又需要明顯禁止物件被複製,將拷貝建構函式和拷貝複製建構函式宣告為private,即可禁止物件的拷貝和賦值

7 為多型基類宣告虛析構函式

7.1 如果基類中有虛函式存在,說明此基函式期待被繼承的,就會出現多型性質,那麼要求基類中的析構函式也要是虛的,這樣用基類物件的指標釋放繼承物件時才不會發生「區域性銷毀」現象

7.2 如果不希望乙個類成為基類,就不要在其中宣告虛函式,因為宣告虛函式會使效能下降

Effective C 學習筆記

學習effective c 已經有相當長的一段時間了,今天抽出時間又堵了一遍第一部分 c語言 c 以c語言為基礎,幾乎支援所有的c語言成分,例如區塊 語句 預處理 內建資料型別 陣列 指標等,c語言的侷限是 沒有模板 沒有異常 沒有過載 物件導向的c 也就是加上了物件特性的c,類 封裝 繼承 多型 ...

effective c 學習筆記

如果不考慮應用程式的使用場合,僅僅考慮語言的靈活性,我贊成作者的想法。但是不同的應用它會有不同的效能要求,所以語言的選擇,應該是用 最適合 條款去選擇。使用巨集定義常量,若定義在標頭檔案中,則所有包含標頭檔案的都可以使用。巨集定義,在預處理的時候進行替換。巨集定義一些簡單的函式,可以減少呼叫開銷,但...

effective c 學習筆記

連續賦值語句a b c優先順序為從右到左。為什麼返回乙個referenceto this指標要比返回其它型別好?如果返回類物件,b c呼叫一次拷貝建構函式,返回乙個臨時變數,a b又呼叫一次賦值拷貝函式。浪費了拷貝時間。大概目的是防止同時delete物件後,出現的異常。建議 copying函式應該確...