1. 程式人生 > >【explicit關鍵字:建構函式前面出現的關鍵字】

【explicit關鍵字:建構函式前面出現的關鍵字】

百度explicit,他會這樣說:表示這個函式不能被隱式轉換。但我還是不得它的真意。

但是,我們可以看個例子就明白了它的用法和它所防止出現的錯誤。

  1 class Test1
  2 {
  3     public:
  4     Test1(int n) { num = n; } //普通建構函式
  5     private:
  6     int num;
  7 };
  8 
  9 class Test2
  10 {
  11     public:
  12     explicit Test2(int n) { num = n; } //explicit(顯式)建構函式
13 private: 14 int num; 15 }; 16 17 int main() 18 { 19 Test1 t1 = 12; //隱式呼叫其建構函式, 成功 20 Test2 t2 = 12; //編譯錯誤,不能隱式呼叫其建構函式 21 Test2 t3(12); //顯示呼叫成功 22 return 0; 23 }

看最後3個建構函式就知道了
(1)19行的,構造成功; 雖然程式碼中沒有傳入引數,但是它隱式呼叫了Test1(int n) { num = n; }

(2)20行的,錯誤;explicit 關鍵字不允許隱式的轉換,必須如21行那樣明確傳入引數