Effective C++

Effective C++ 的忠告:

  • 盡量用const和inline,而不用#define,即盡量用編譯器,而不用預處理器。
  • 盡量用iostream,而不用stdio.h。
  • 盡量用new和delete,而不用malloc和free,因為new和delete會執(zhí)行構(gòu)造函數(shù)和析構(gòu)函數(shù),而malloc和free不會。
  • 盡量在函數(shù)中使用C++風格的注釋 // 函數(shù)頭用/* */
  • new和delete與malloc和free要成對出現(xiàn)。
  • 析構(gòu)函數(shù)里對指針成員delete,delete NULL指針并不影響什么。
  • 預先準備好內(nèi)在不夠的情況,try{ new..} catch(bad_alloc baex) {}
  • 寫operator new和operator delete時要遵循常規(guī)。
  • 如果寫了operator new,就要寫operator delete。
  • 為需要動態(tài)分配內(nèi)存的類提供一個復制構(gòu)造函數(shù)和賦值操作運算符。
  • 盡量使用初始化,而不在構(gòu)造函數(shù)里賦值。CC::CC(int v_value) : value(v_value) {}
  • 初始化列表中成員的列出順序與成員的在類中的聲明順序相同。
  • 確定基類有虛析構(gòu)函數(shù),否則釋放子類時只能執(zhí)行基類的析構(gòu)函數(shù),而不會執(zhí)行子類的虛構(gòu)函數(shù)。
  • 讓operator= 返回*this的引用, (a = b) = c;只是為了這個能正確執(zhí)行,不過這可是一個很阿格里拉的編程風格。
  • 在operator= 中對所有數(shù)據(jù)成員賦值。
  • 在operator= 中檢查對自己賦值的情況。如不處理這種情況,在operator= 中先釋放指針對象數(shù)據(jù),
    然后再把目標的數(shù)據(jù)復制過來,因為是自己給自己復制,但數(shù)據(jù)已經(jīng)釋放,所以發(fā)生錯誤。
  • 爭取使類的接口完整并最小。
  • 分清成員函數(shù),非成員函數(shù)和友元函數(shù)。
  • 避免public接口出現(xiàn)數(shù)據(jù)成員。set, get.
  • 盡可能使用const。
  • 盡量傳引用,而不是傳值。const ClassName&。
  • 必須返回一個對象時,不要試圖返回一個引用。如函數(shù)中的臨時變量的引用。
  • 在函數(shù)重載和設定參數(shù)缺省值的函數(shù)之間慎重選擇。
  • 避免指針和數(shù)字類型重載:void func(int x)與void func(string* str)傳入0時:func(static_cast<string*>(null)。
  • 如果不想使用隱式生成的函數(shù),就顯示的禁用它:private Array& operator=(const Array& ref);
  • 使用名字空間的好處:盡可能的避免名字沖突引發(fā)的問題。假如一個程序中有幾百個名字沖突,名字空間能很好的解決這個問題。
  • 避免返回內(nèi)部數(shù)據(jù)的句柄:指針。
  • 避免返回private和protected成員的非const引用和指針。
  • 千萬不要返回局部對象的引用,也不要返回函數(shù)內(nèi)部定義的new初始化的指針,容易忘掉delete。
  • 盡可能推遲變量的定義,這個在C中做不到,定義無用的變量必然伴隨無用的開銷。
  • 將文件間的編譯依賴性降至最低:分離的關鍵在于:對類的聲明的依賴與對類的定義的依賴:
    盡量讓頭文件不要依賴于另的文件。如使用ImageLoad.h中的Image類,在類的聲明中不要#include"ImageLoad.h",
    而只是聲明類class Image; 在類的定義中才使用#include"ImageLoad.h"。
    盡量不要在頭文件中包含其他的頭文件。
  • 使用函數(shù)體現(xiàn)“是一個”的含義,而不是“有一個”。
  • 明智的使用多繼承,這東西不好玩。
  • 編譯器能為我們自動生成的函數(shù):
    構(gòu)造函數(shù),析構(gòu)函數(shù),復制構(gòu)造函數(shù),賦值運算符重載,一對取地址運算符。
  • 寧可編譯鏈接時出錯,也不愿運行時出錯。極少情況下會使用C++拋出異常:內(nèi)存耗盡:
    C++中沒有上溢,下溢,除零檢查,數(shù)組越界檢查。
  • 重視編譯器警告。
  • 熟悉標準庫,在名字空間std中的。C++的偽標準庫,如iostream.h, limits.h。
  • 常變量,類成員,父類構(gòu)造函數(shù)要放在初始化列表初始化。
  • 指針定義時初始化為NULL。
  • 終極解決大法:良好的編譯習慣可很避免上面很多情況的發(fā)生,如有一天C++的語法變得像Java一樣限制那么多,
    就不會出現(xiàn)這么多問題,不過也正因為如此,才出現(xiàn)了N多C++奇淫技巧,就如茴香豆的茴有四種寫法,
    這里可不止四種。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 盡量用const和inline而不用#define盡量用編譯器而不用預處理。 盡量用 而不用 scanf和prin...
    mikey219閱讀 871評論 0 1
  • 再讀高效c++,頗有收獲,現(xiàn)將高效c++中的經(jīng)典分享如下,希望對你有所幫助。 1、盡量以const \enum\i...
    橙小汁閱讀 1,310評論 0 1
  • PART0、前言 TOPIC運用c++進行高效編程 收獲了解c++如何行為為什么那樣行為如何運用其行為形成優(yōu)勢 P...
    rh_Jameson閱讀 3,695評論 2 30
  • C++運算符重載-下篇 本章內(nèi)容:1. 運算符重載的概述2. 重載算術(shù)運算符3. 重載按位運算符和二元邏輯運算符4...
    Haley_2013閱讀 1,522評論 0 49
  • 現(xiàn)在的團隊管理,家庭教育,講權(quán)威還是民主其實都不一定最合適。 就像小朋友哭泣一樣,之前哭泣,會全力阻止...
    DDM王軍燕閱讀 845評論 0 0

友情鏈接更多精彩內(nèi)容