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

C++ explicit構造函數(shù)實例解析

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

按照C語言默認規(guī)定,只有一個參數(shù)的構造函數(shù)也定義了一個隱式轉換,將該構造函數(shù)對應數(shù)據(jù)類型的數(shù)據(jù)轉換為該類對象,如下面所示:

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

但是有的時候可能會不需要這種隱式轉換,如下:

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

下面兩種寫法比較正常:

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

下面兩種寫法就比較疑惑了:

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

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

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

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

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

下面兩種寫法就不允許了:

String s4 = 10; //編譯不通過,不允許隱式的轉換
String s5 = 'a'; //編譯不通過,不允許隱式的轉換

因此,某些時候,explicit 可以有效得防止構造函數(shù)的隱式轉換帶來的錯誤或者誤解

explicit只對構造函數(shù)起作用,用來抑制隱式轉換。如:   

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

當調用   Function(2)   的時候,2   會隱式轉換為   A   類型。這種情況常常不是程序員想要的結果,所以,要避免之,就可以這樣寫:   

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

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

總結:explicit只對構造函數(shù)起作用,用來抑制隱式轉換。

相關文章

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

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

    下面小編就為大家?guī)硪黄狶inux下C語言的幾道經(jīng)典面試題小結(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • 常用Hash算法(C語言的簡單實現(xiàn))

    常用Hash算法(C語言的簡單實現(xiàn))

    下面小編就為大家?guī)硪黄S肏ash算法(C語言的簡單實現(xiàn))。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • C++設計模式之命令模式

    C++設計模式之命令模式

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

    C語言員工業(yè)績銷售源代碼

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

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

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

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

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

    linux c 查找使用庫的cflags與libs的方法詳解

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

    OpenCV4.1.0+VisualStudio2019開發(fā)環(huán)境搭建(超級簡單)

    這篇文章主要介紹了OpenCV4.1.0+VisualStudio2019開發(fā)環(huán)境搭建(超級簡單),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • 詳細談談C語言中動態(tài)內存

    詳細談談C語言中動態(tài)內存

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

    C++ explicit關鍵字的應用方法詳細講解

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

最新評論

石台县| 临颍县| 乐平市| 上犹县| 积石山| 漯河市| 阿拉尔市| 双牌县| 和平县| 沁水县| 沐川县| 克山县| 永德县| 和政县| 宣城市| 汨罗市| 滦平县| 扎赉特旗| 政和县| 昌乐县| 安丘市| 麻江县| 定安县| 嘉禾县| 灵武市| 塔河县| 沁阳市| 赞皇县| 阿克苏市| 芒康县| 商河县| 镇原县| 恩平市| 丰镇市| 平顶山市| 清丰县| 涡阳县| 石首市| 嘉义市| 井研县| 罗甸县|