久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

C++中explicit關(guān)鍵字的作用

 答案95 2017-05-02

explicit用來防止由構(gòu)造函數(shù)定義的隱式轉(zhuǎn)換,。

 

要明白它的作用,首先要了解隱式轉(zhuǎn)換:可以用單個實參來調(diào)用的構(gòu)造函數(shù)定義了從形參類型到該類類型的一個隱式轉(zhuǎn)換,。

例如:

 

復制代碼
class things
{
public:
things(const std::string&name =""):
m_name(name),height(0),weight(10){}
int CompareTo(const things & other);
std::string m_name;
int height;
int weight;
};
復制代碼

 

  

 

這里things的構(gòu)造函數(shù)可以只用一個實參完成初始化,。所以可以進行一個隱式轉(zhuǎn)換,像下面這樣:

things a;
................//在這里被初始化并使用,。
std::string nm ="book_1";
//由于可以隱式轉(zhuǎn)換,,所以可以下面這樣使用
int result = a.CompareTo(nm);

  這段程序使用一個string類型對象作為實參傳給things的CompareTo函數(shù)。這個函數(shù)本來是需要一個tings對象作為實參?,F(xiàn)在編譯器使用string nm來構(gòu)造并初始化一個

 things對象,,新生成的臨時的things對象被傳遞給CompareTo函數(shù),并在離開這段函數(shù)后被析構(gòu),。

 

  這種行為的正確與否取決于業(yè)務(wù)需要,。假如你只是想測試一下a的重量與10的大小之比,這么做也許是方便的,。但是假如在CompareTo函數(shù)中還涉及到了要除以初始化為0的height屬性,,那么這么做可能就是錯誤的。需要在構(gòu)造tings之后更改height屬性不為0,。所以要限制這種隱式類型轉(zhuǎn)換,。

  那么這時候就可以通過將構(gòu)造函數(shù)聲明為explicit,來防止隱式類型轉(zhuǎn)換,。

  explicit關(guān)鍵字只能用于類內(nèi)部的構(gòu)造函數(shù)聲明上,,而不能用在類外部的函數(shù)定義上。現(xiàn)在things類像這樣:

復制代碼
class things
{
public:
explicit things(const std::string&name =""):
m_name(name),height(0),weight(0){}
int CompareTo(const things & other);
std::string m_name;
int height;
int weight;
};
復制代碼

  這時再進行編譯,,在vs2008上會提示:沒有可用于執(zhí)行該轉(zhuǎn)換的用戶定義的轉(zhuǎn)換運算符,,或者無法調(diào)用該運算符。

  這時你仍然可以通過顯示使用構(gòu)造函數(shù)完成上面的類型轉(zhuǎn)換:

things a;
................//在這里被初始化并使用,。
std::string nm ="book_1";
//顯示使用構(gòu)造函數(shù)
int result = a.CompareTo(things(nm));

  google的c++規(guī)范中提到explicit的優(yōu)點是可以避免不合時宜的類型變換,,缺點無。所以google約定所有單參數(shù)的構(gòu)造函數(shù)都必須是顯示的,,只有極少數(shù)情況下拷貝構(gòu)造函數(shù)可以不聲明稱explicit,。例如作為其他類的透明包裝器的類。

 

  effective c++中說:被聲明為explicit的構(gòu)造函數(shù)通常比其non-explicit兄弟更受歡迎,。因為它們禁止編譯器執(zhí)行非預(yù)期(往往也不被期望)的類型轉(zhuǎn)換,。除非我有一個好理由允許構(gòu)造函數(shù)被用于隱式類型轉(zhuǎn)換,否則我會把它聲明為explicit。我鼓勵你遵循相同的政策,。

  轉(zhuǎn)載請注明出處,。

    

 

 

 

 

 

 

  

 

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多