在C++中,我們有時可以將構造函數用作自動類型轉換函數。但這種自動特性并非總是合乎要求的,有時會導致意外的類型轉換,因此,C++新增了關鍵字explicit,用于關閉這種自動特性。即被explicit關鍵字修飾的類構造函數,不能進行自動地隱式類型轉換,只能顯式地進行類型轉換。
注意:只有一個參數的構造函數,或者構造函數有n個參數,但有n-1個參數提供了默認值,這樣的情況才能進行類型轉換。
下面通過一段代碼演示具體應用(無explicit情形):
/* 示例代碼1 */
class Demo
{
public:
Demo(); /* 構造函數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;
};
上述四種構造函數:
構造函數1沒有參數,無法進行類型轉換!
構造函數2有一個參數,可以進行類型轉換,如:Demo test; test = 12.2;這樣的調用就相當于把12.2隱式轉換為Demo類型。
構造函數3有兩個參數,且無默認值,故無法使用類型轉換!
構造函數4有3個參數,其中兩個參數有默認值,故可以進行隱式轉換,如:Demo test;test = 10; 。
下面講述使用了關鍵字explicit的情況:
/* 示例代碼2 */
class Demo
{
public:
Demo(); /* 構造函數1 */
explicit Demo(double a); /* 示例代碼2 */
Demo(int a,double b); /* 示例代碼3 */
~Demo();
void Func(void);
private:
int value1;
int value2;
};
在上述構造函數2中,由于使用了explicit關鍵字,則無法進行隱式轉換。即:Demo test;test = 12.2;是無效的!但是我們可以進行顯示類型轉換,如:
Demo test;
test = Demo(12.2); 或者
test = (Demo)12.2;
到此這篇關于C++ explicit關鍵字的使用詳解的文章就介紹到這了,更多相關C++ explicit關鍵字的使用內容請搜索html5模板網以前的文章希望大家以后多多支持html5模板網!
【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!