C++ explicit關(guān)鍵字的使用詳解
在C++中,我們有時(shí)可以將構(gòu)造函數(shù)用作自動(dòng)類型轉(zhuǎn)換函數(shù)。但這種自動(dòng)特性并非總是合乎要求的,有時(shí)會(huì)導(dǎo)致意外的類型轉(zhuǎn)換,因此,C++新增了關(guān)鍵字explicit,用于關(guān)閉這種自動(dòng)特性。即被explicit關(guān)鍵字修飾的類構(gòu)造函數(shù),不能進(jìn)行自動(dòng)地隱式類型轉(zhuǎn)換,只能顯式地進(jìn)行類型轉(zhuǎn)換。
注意:只有一個(gè)參數(shù)的構(gòu)造函數(shù),或者構(gòu)造函數(shù)有n個(gè)參數(shù),但有n-1個(gè)參數(shù)提供了默認(rèn)值,這樣的情況才能進(jìn)行類型轉(zhuǎn)換。
下面通過一段代碼演示具體應(yīng)用(無explicit情形):
/* 示例代碼1 */ class Demo { public: Demo(); /* 構(gòu)造函數(shù)1 */ Demo(double a); /* 示例代碼2 */ Demo(int a,double b); /* 示例代碼3 */ Demo(int a,int b=10,double c=1.6); /* 示例代碼4 */ ~Demo(); void Func(void); private: int value1; int value2; };
上述四種構(gòu)造函數(shù):
構(gòu)造函數(shù)1沒有參數(shù),無法進(jìn)行類型轉(zhuǎn)換!
構(gòu)造函數(shù)2有一個(gè)參數(shù),可以進(jìn)行類型轉(zhuǎn)換,如:Demo test; test = 12.2;這樣的調(diào)用就相當(dāng)于把12.2隱式轉(zhuǎn)換為Demo類型。
構(gòu)造函數(shù)3有兩個(gè)參數(shù),且無默認(rèn)值,故無法使用類型轉(zhuǎn)換!
構(gòu)造函數(shù)4有3個(gè)參數(shù),其中兩個(gè)參數(shù)有默認(rèn)值,故可以進(jìn)行隱式轉(zhuǎn)換,如:Demo test;test = 10; 。
下面講述使用了關(guān)鍵字explicit的情況:
/* 示例代碼2 */ class Demo { public: Demo(); /* 構(gòu)造函數(shù)1 */ explicit Demo(double a); /* 示例代碼2 */ Demo(int a,double b); /* 示例代碼3 */ ~Demo(); void Func(void); private: int value1; int value2; };
在上述構(gòu)造函數(shù)2中,由于使用了explicit關(guān)鍵字,則無法進(jìn)行隱式轉(zhuǎn)換。即:Demo test;test = 12.2;是無效的!但是我們可以進(jìn)行顯示類型轉(zhuǎn)換,如:
Demo test; test = Demo(12.2); 或者 test = (Demo)12.2;
到此這篇關(guān)于C++ explicit關(guān)鍵字的使用詳解的文章就介紹到這了,更多相關(guān)C++ explicit關(guān)鍵字的使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++標(biāo)準(zhǔn)庫封裝的vector數(shù)組
這篇文章主要介紹了C++標(biāo)準(zhǔn)庫封裝的vector數(shù)組,vector創(chuàng)建的對(duì)象包含眾多封裝好的函數(shù),想了解其相關(guān)資料的小伙伴可以參考下面文章內(nèi)容,希望對(duì)你的學(xué)習(xí)有所幫助2022-03-03C++構(gòu)造函數(shù)的類型,淺拷貝與深拷貝詳解
這篇文章主要為大家詳細(xì)介紹了C++構(gòu)造函數(shù)的類型,淺拷貝與深拷貝,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-03-03C語言 詳細(xì)分析結(jié)構(gòu)體的內(nèi)存對(duì)齊
C 數(shù)組允許定義可存儲(chǔ)相同類型數(shù)據(jù)項(xiàng)的變量,結(jié)構(gòu)是 C 編程中另一種用戶自定義的可用的數(shù)據(jù)類型,它允許你存儲(chǔ)不同類型的數(shù)據(jù)項(xiàng),本篇讓我們來了解C 的結(jié)構(gòu)體內(nèi)存對(duì)齊2022-03-03C語言用函數(shù)實(shí)現(xiàn)反彈球消磚塊
這篇文章主要為大家詳細(xì)介紹了C語言用函數(shù)實(shí)現(xiàn)反彈球消磚塊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05