一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

More Effective C++ (M1 -to- M8)

 My Room 2012 2012-03-17
M1:指針與引用的區(qū)別
   1.指針可以指向空值,但是引用不行,它必須指向某個對象,因此引用必須初始化。
   2.引用比指針效率高。
   3.指針可以被重新賦值以指向另一個不同的對象。但是引用則總是指向在初始化時被指定的對象,以后不能改變。
summary:當(dāng)你知道你必須指向一個對象并且不想改變其指向時,或者在重載操作符并為防止不必要的語義誤解時,你不應(yīng)該使用指針。而在除此之外的其他情況下,則應(yīng)使用指針。
M2:盡量使用C++風(fēng)格的類型轉(zhuǎn)換
(static_cast, const_cast, dynamic_cast, 和reinterpret_cast).
const_cast用于類型轉(zhuǎn)換掉表達式的const或volatileness屬性
dynamic_cast,它被用于安全地沿著類的繼承關(guān)系向下進行類型轉(zhuǎn)換。它不能被用于缺乏虛函數(shù)的類型上
(參見條款M24),也不能用它來轉(zhuǎn)換掉constness
reinterpret_casts的最普通的用途就是在函數(shù)指針類型之間進行轉(zhuǎn)換,轉(zhuǎn)換結(jié)果幾乎都是執(zhí)行期定義
(implementation-defined)。因此,使用reinterpret_casts的代碼很難移植。轉(zhuǎn)換函數(shù)指針的代碼是
不可移植的(C++不保證所有的函數(shù)指針都被用一樣的方法表示),在一些情況下這樣的轉(zhuǎn)換會產(chǎn)生不正
確的結(jié)果(參見條款M31),所以你應(yīng)該避免轉(zhuǎn)換函數(shù)指針類型,除非你處于著背水一戰(zhàn)和尖刀架喉的危
急時刻。
static_cast在功能上基本上與C風(fēng)格的類型轉(zhuǎn)換一樣強大,含義也一樣
M3:不要對數(shù)組使用多態(tài)
語言規(guī)范中說通過一個基類指針來刪除一個含有派生類對象的數(shù)組,結(jié)果將是不確定的。多態(tài)和指針?biāo)惴ú荒芑旌显谝黄饋碛?,所以?shù)組與多態(tài)也不能用在一起。(array[I]只是一個指針?biāo)惴ǖ目s寫:它所代表的是*(array)。)
M4:避免無用的缺省構(gòu)造函數(shù)
無用的缺省構(gòu)造函數(shù)不能確保對象進行了有意義的初始化,成員函數(shù)就會因為必須檢測成員的有效性而變得復(fù)雜,
而且會影響工作效率
M5:謹(jǐn)慎定義類型轉(zhuǎn)換函數(shù)
隱式類型轉(zhuǎn)換運算符只是一個樣子奇怪的成員函數(shù):operator 關(guān)鍵字,其后跟一個類型符號。你不用定義函數(shù)的返回類型,因為返回類型就是這個函數(shù)的名字。
根本問題是當(dāng)你在不需要使用轉(zhuǎn)換函數(shù)時,這些的函數(shù)缺卻會被調(diào)用運行。結(jié)果,這些不正確的程序會做出一些令人惱火的事情,而你又很難判斷出原因。
克服隱式類型轉(zhuǎn)換運算符的缺點解決方法是用不使用語法關(guān)鍵字的等同的函數(shù)來替代轉(zhuǎn)換運算符。例如為了把Rational對象轉(zhuǎn)換為double,用asDouble函數(shù)代替operator double函數(shù)
通過不聲明運算符(operator)的方法,可以克服隱式類型轉(zhuǎn)換運算符的缺點,但是單參數(shù)構(gòu)造函數(shù)沒有那么簡單。
容易的方法是利用一個最新編譯器的特性,explicit關(guān)鍵字。
第二就是用 proxy classes
template<class T>
class Array
{
public:
  class ArraySize
 {                    // 這個類是新的
  public:
    ArraySize(int numElements): theSize(numElements) {}
    int size() const { return theSize; }
  private:
    int theSize;
  };
Array(int lowBound, int highBound);
  Array(ArraySize size);                  // 注意新的聲明
 ...
};
M6:自增(increment)、自減(decrement)操作符前綴形式與后綴形式的區(qū)別
  UPInt& operator++();                   // ++ 前綴
  const UPInt operator++(int);              // ++ 后綴
  UPInt& operator--();                    // -- 前綴
  const UPInt operator--(int);              // -- 后綴

他們返回值類型不同以及后綴操作符應(yīng)該以前綴操作符為基礎(chǔ)來實現(xiàn)
我們明確一下,當(dāng)處理用戶定義的類型時,盡可能地使用前綴increment,因為它的效率較高。

M7:不要重載“&&”,“||”, 或“,”
在C/C++里面,“&&”,“||” 使用布爾表達式短路求值法,如果你重載&&或||,就沒有辦法提供給程序員他們所期望和使用的行為特性,所以不要重載&&和||。
一個包含逗號的表達式首先計算逗號左邊的表達式,然后計算逗號右邊的表達式;整個表達式的結(jié)果是逗號右邊表達式的值。重載后你不能保證這個特性,所以不要重載“,”表達式。
你不能重載下面的操作符:
.              .*              ::             ?:
new          delete        sizeof      typeid
static_cast  dynamic_cast  const_cast  reinterpret_cast
你能重載:
operator new        operator delete
operator   new[]    operator delete[]
+    -   *   /   %   ^     &   |     ~
!    =   <   >  +=   -=   *=   /=   %=
^=  &=  |=  <<  >>   >>=  <<=  ==   !=
<=  >=  &&  ||  ++   --    ,   ->*  ->
()  []
當(dāng)然能重載這些操作符不是去重載的理由,如果你沒有一個好理由重載操作符,就不要重載。

M8:理解各種不同含義的new和delete
你想在堆上建立一個對象,應(yīng)該用new操作符。它既分配內(nèi)存又為對象調(diào)用構(gòu)造函數(shù)。如果你僅僅想分配內(nèi)存,就應(yīng)該調(diào)用operator new函數(shù);它不會調(diào)用構(gòu)造函數(shù)。如果你想定制自己的在堆對象被建立時的內(nèi)存分配過程,你應(yīng)該寫你自己的operator new函數(shù),然后使用new操作符,new操作符會調(diào)用你定制的operator new。如果你想在一塊已經(jīng)獲得指針的內(nèi)存里建立一個對象,應(yīng)該用placement new。
operator new / operator delete ==(malloc/free) new/delete  而placement new只是返回轉(zhuǎn)遞給它的指針,所以只需要顯示調(diào)用對象的析構(gòu)函數(shù)
分配數(shù)組空間時,new操作符調(diào)用的是數(shù)組分配函數(shù)operator new[],它與operator new一樣能被重載。
同樣delete操作符調(diào)用operator delete[],operator delete[]也可以被重載。
new和delete操作符是內(nèi)置的,其行為不受你的控制,然而它們調(diào)用的內(nèi)存分配和釋放函數(shù)則可以控制。當(dāng)你想定制new和delete操作符的行為時,請記住你不能真的做到這一點。你只能改變它們?yōu)橥瓿伤鼈兊墓δ芩扇〉姆椒?,而它們所完成的功能則被語言固定下來,不能改變。(You can modify how they do what they do, but what they do is fixed by the language)

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    国内九一激情白浆发布| 在线播放欧美精品一区| 成人亚洲国产精品一区不卡| 九九热精品视频在线观看| 国产精品免费视频专区| 久久精品福利在线观看| 久久本道综合色狠狠五月| 欧美三级精品在线观看| 一区二区福利在线视频| 中文字幕佐山爱一区二区免费| 字幕日本欧美一区二区| 91亚洲精品国产一区| 亚洲国产精品国自产拍社区| 久久这里只精品免费福利| 亚洲欧美日韩在线中文字幕| 三级理论午夜福利在线看| 国产在线一区二区三区不卡| 国产一区二区三区丝袜不卡| 99国产精品国产精品九九| 日韩精品视频一二三区| 亚洲一区二区亚洲日本| 亚洲精品福利视频你懂的| 妻子的新妈妈中文字幕| 国产一级二级三级观看| 国内精品偷拍视频久久| 中文字幕av诱惑一区二区| 国产精品十八禁亚洲黄污免费观看| 黄色片国产一区二区三区| 午夜精品福利视频观看 | 久久精品国产第一区二区三区| 91麻豆精品欧美一区| 日韩偷拍精品一区二区三区| 国产成人av在线免播放观看av| 91亚洲精品综合久久| 高清一区二区三区大伊香蕉| 99久久人妻中文字幕| 婷婷基地五月激情五月| 人妻熟女欲求不满一区二区| 久久综合亚洲精品蜜桃| 亚洲熟妇中文字幕五十路| 嫩呦国产一区二区三区av|