您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關C++中explicit關鍵字如何使用,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
在C++中,我們有時可以將構造函數用作自動類型轉換函數。但這種自動特性并非總是合乎要求的,有時會導致意外的類型轉換,因此,C++新增了關鍵字explicit,用于關閉這種自動特性。即被explicit關鍵字修飾的類構造函數,不能進行自動地隱式類型轉換,只能顯式地進行類型轉換。
注意:只有一個參數的構造函數,或者構造函數有n個參數,但有n-1個參數提供了默認值,這樣的情況才能進行類型轉換。
下面通過一段代碼演示具體應用(無explicit情形):
1 /* 示例代碼1 */ 2 class Demo 3 { 4 public: 5 Demo(); /* 構造函數1 */ 6 Demo(double a); /* 示例代碼2 */ 7 Demo(int a,double b); /* 示例代碼3 */ 8 Demo(int a,int b=10,double c=1.6); /* 示例代碼4 */ 9 ~Demo();10 void Func(void);11 12 private:13 int value1;14 int value2;15 };
上述四種構造函數:
構造函數1沒有參數,無法進行類型轉換!
構造函數2有一個參數,可以進行類型轉換,如:Demo test; test = 12.2;這樣的調用就相當于把12.2隱式轉換為Demo類型。
構造函數3有兩個參數,且無默認值,故無法使用類型轉換!
構造函數4有3個參數,其中兩個參數有默認值,故可以進行隱式轉換,如:Demo test;test = 10; 。
下面講述使用了關鍵字explicit的情況:
1 1 /* 示例代碼2 */ 2 2 class Demo 3 3 { 4 4 public: 5 5 Demo(); /* 構造函數1 */ 6 6 explicit Demo(double a); /* 示例代碼2 */ 7 7 Demo(int a,double b); /* 示例代碼3 */ 8 8 9 9 ~Demo();10 10 void Func(void);11 11 12 12 private:13 13 int value1;14 14 int value2;15 15 };
在上述構造函數2中,由于使用了explicit關鍵字,則無法進行隱式轉換。即:Demo test;test = 12.2;是無效的!但是我們可以進行顯示類型轉換,如:
Demo test;
test = Demo(12.2); 或者
test = (Demo)12.2;
上述就是小編為大家分享的C++中explicit關鍵字如何使用了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。