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函式應該確...