最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++ explicit構(gòu)造函數(shù)實(shí)例解析

 更新時(shí)間:2014年07月14日 17:28:46   投稿:shichen2014  
這篇文章主要介紹了C++ explicit構(gòu)造函數(shù),需要的朋友可以參考下

按照C語(yǔ)言默認(rèn)規(guī)定,只有一個(gè)參數(shù)的構(gòu)造函數(shù)也定義了一個(gè)隱式轉(zhuǎn)換,將該構(gòu)造函數(shù)對(duì)應(yīng)數(shù)據(jù)類(lèi)型的數(shù)據(jù)轉(zhuǎn)換為該類(lèi)對(duì)象,如下面所示:

class String {
String ( const char* p ); // 用C風(fēng)格的字符串p作為初始化值
//…
}
String s1 = "hello"; //OK 隱式轉(zhuǎn)換,等價(jià)于String s1 = String("hello");

但是有的時(shí)候可能會(huì)不需要這種隱式轉(zhuǎn)換,如下:

class String {
    String ( int n ); //本意是預(yù)先分配n個(gè)字節(jié)給字符串
String ( const char* p ); // 用C風(fēng)格的字符串p作為初始化值
//…
}

下面兩種寫(xiě)法比較正常:

String s2 ( 10 );  //OK 分配10個(gè)字節(jié)的空字符串
String s3 = String ( 10 ); //OK 分配10個(gè)字節(jié)的空字符串

下面兩種寫(xiě)法就比較疑惑了:

String s4 = 10; //編譯通過(guò),也是分配10個(gè)字節(jié)的空字符串
String s5 = 'a'; //編譯通過(guò),分配int('a')個(gè)字節(jié)的空字符串

s4 和s5 分別把一個(gè)int型和char型,隱式轉(zhuǎn)換成了分配若干字節(jié)的空字符串,容易令人誤解。
為了避免這種錯(cuò)誤的發(fā)生,我們可以聲明顯示的轉(zhuǎn)換,使用explicit 關(guān)鍵字:

class String {
    explicit String ( int n ); //本意是預(yù)先分配n個(gè)字節(jié)給字符串
String ( const char* p ); // 用C風(fēng)格的字符串p作為初始化值
//…
}

加上explicit,就抑制了String ( int n )的隱式轉(zhuǎn)換,
 
下面兩種寫(xiě)法仍然正確:

String s2 ( 10 );  //OK 分配10個(gè)字節(jié)的空字符串
String s3 = String ( 10 ); //OK 分配10個(gè)字節(jié)的空字符串

下面兩種寫(xiě)法就不允許了:

String s4 = 10; //編譯不通過(guò),不允許隱式的轉(zhuǎn)換
String s5 = 'a'; //編譯不通過(guò),不允許隱式的轉(zhuǎn)換

因此,某些時(shí)候,explicit 可以有效得防止構(gòu)造函數(shù)的隱式轉(zhuǎn)換帶來(lái)的錯(cuò)誤或者誤解

explicit只對(duì)構(gòu)造函數(shù)起作用,用來(lái)抑制隱式轉(zhuǎn)換。如:   

class  A{  
  A(int a);  
};  
int Function(A a);  

當(dāng)調(diào)用   Function(2)   的時(shí)候,2   會(huì)隱式轉(zhuǎn)換為   A   類(lèi)型。這種情況常常不是程序員想要的結(jié)果,所以,要避免之,就可以這樣寫(xiě):   

class  A  {  
 explicit  A(int  a);  
};  
int  Function(A  a);  

這樣,當(dāng)調(diào)用Function(2)的時(shí)候,編譯器會(huì)給出錯(cuò)誤信息(除非Function有個(gè)以int為參數(shù)的重載形式),這就避免了在程序員毫不知情的情況下出現(xiàn)錯(cuò)誤。

總結(jié):explicit只對(duì)構(gòu)造函數(shù)起作用,用來(lái)抑制隱式轉(zhuǎn)換。

相關(guān)文章

  • Linux下C語(yǔ)言的幾道經(jīng)典面試題小結(jié)(分享)

    Linux下C語(yǔ)言的幾道經(jīng)典面試題小結(jié)(分享)

    下面小編就為大家?guī)?lái)一篇Linux下C語(yǔ)言的幾道經(jīng)典面試題小結(jié)(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • 常用Hash算法(C語(yǔ)言的簡(jiǎn)單實(shí)現(xiàn))

    常用Hash算法(C語(yǔ)言的簡(jiǎn)單實(shí)現(xiàn))

    下面小編就為大家?guī)?lái)一篇常用Hash算法(C語(yǔ)言的簡(jiǎn)單實(shí)現(xiàn))。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-09-09
  • C++設(shè)計(jì)模式之命令模式

    C++設(shè)計(jì)模式之命令模式

    這篇文章主要介紹了C++設(shè)計(jì)模式之命令模式,本文講解了什么是命令模式、命令模式的使用場(chǎng)合等內(nèi)容,并給出了一個(gè)代碼實(shí)例,需要的朋友可以參考下
    2014-10-10
  • C語(yǔ)言員工業(yè)績(jī)銷(xiāo)售源代碼

    C語(yǔ)言員工業(yè)績(jī)銷(xiāo)售源代碼

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言員工業(yè)績(jī)銷(xiāo)售源代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • new和malloc的區(qū)別深入解析

    new和malloc的區(qū)別深入解析

    以下是分別是對(duì)new和malloc的區(qū)別進(jìn)行了詳細(xì)的分析及介紹,需要的朋友可以過(guò)來(lái)參考下
    2013-09-09
  • C++中實(shí)現(xiàn)fibonacci數(shù)列的幾種方法

    C++中實(shí)現(xiàn)fibonacci數(shù)列的幾種方法

    本文主要介紹了C++中實(shí)現(xiàn)fibonacci數(shù)列的幾種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • linux c 查找使用庫(kù)的cflags與libs的方法詳解

    linux c 查找使用庫(kù)的cflags與libs的方法詳解

    本篇文章是對(duì)在linux中使用c語(yǔ)言查找使用庫(kù)的cflags與libs的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • OpenCV4.1.0+VisualStudio2019開(kāi)發(fā)環(huán)境搭建(超級(jí)簡(jiǎn)單)

    OpenCV4.1.0+VisualStudio2019開(kāi)發(fā)環(huán)境搭建(超級(jí)簡(jiǎn)單)

    這篇文章主要介紹了OpenCV4.1.0+VisualStudio2019開(kāi)發(fā)環(huán)境搭建(超級(jí)簡(jiǎn)單),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 詳細(xì)談?wù)凜語(yǔ)言中動(dòng)態(tài)內(nèi)存

    詳細(xì)談?wù)凜語(yǔ)言中動(dòng)態(tài)內(nèi)存

    在C語(yǔ)言中,編寫(xiě)程序的時(shí)候不能確定內(nèi)存的大小,希望程序在運(yùn)行的過(guò)程中根據(jù)數(shù)據(jù)量的大小動(dòng)態(tài)的分配內(nèi)存,這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中動(dòng)態(tài)內(nèi)存的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • C++ explicit關(guān)鍵字的應(yīng)用方法詳細(xì)講解

    C++ explicit關(guān)鍵字的應(yīng)用方法詳細(xì)講解

    C++ explicit關(guān)鍵字用來(lái)修飾類(lèi)的構(gòu)造函數(shù),表明該構(gòu)造函數(shù)是顯式的,既然有"顯式"那么必然就有"隱式",那么什么是顯示而什么又是隱式的呢?下面就讓我們一起來(lái)看看這方面的知識(shí)吧
    2013-09-09

最新評(píng)論

乐安县| 巴林左旗| 区。| 会同县| 吕梁市| 文山县| 万山特区| 延庆县| 华阴市| 昌乐县| 湛江市| 永安市| 北流市| 临潭县| 定南县| 洪江市| 惠东县| 嘉峪关市| 东莞市| 中超| 新乐市| 神池县| 潞城市| 金门县| 东阳市| 读书| 拉孜县| 温宿县| 江达县| 麻栗坡县| 略阳县| 昌宁县| 临邑县| 宿州市| 嵊州市| 余庆县| 张家界市| 阳朔县| 衡水市| 沿河| 新宁县|