C++中的關鍵字用法--- explicit

1. C++中的explicit函數

  C++提供了關鍵字explicit,能夠阻止不該該容許的通過轉換構造函數進行的隱式轉換的發生。聲明爲explicit的構造函數不能在隱式轉換中使用。spa

  C++中, 一個參數的構造函數(或者除了第一個參數外其他參數都有默認值的多參構造函數), 承擔了兩個角色。 1 是個構造器 ,2 是個默認且隱含的類型轉換操做符。code

 1 class Test1
 2 {
 3 public:
 4     Test1(int n)
 5     {
 6         num=n;
 7     }//普通構造函數
 8 private:
 9     int num;
10 };
11 class Test2
12 {
13 public:
14     explicit Test2(int n)
15     {
16         num=n;
17     }//explicit(顯式)構造函數
18 private:
19     int num;
20 };
21 int main()
22 {
23     Test1 t1=12;//隱式調用其構造函數,成功
24     Test2 t2=12;//編譯錯誤,不能隱式調用其構造函數
25     Test2 t2(12);//顯式調用成功
26     return 0;
27 }
   Test1的構造函數帶一個int型的參數,代碼23行會隱式轉換成調用Test1的這個構造函數。而Test2的構造函數被聲明爲explicit(顯式),這表示不能經過隱式轉換來調用這個構造函數,所以代碼24行會出現編譯錯誤。
普通構造函數可以被隱式調用。而explicit構造函數只能被顯式調用。
相關文章
相關標籤/搜索