歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C++中explict關鍵字

C++中explict關鍵字

日期:2017/3/1 9:16:20   编辑:Linux編程

C++規定:對於可能只需傳一個參數的默認構造函數,都定義了一種隱式調用。注意:只需傳一個參數不僅指的是只有一個參數的默認構造函數,也指那些包含了定義了參數默認值的那些默認構造函數。

舉例說明:

class MyClass

{

  public:

    MyClass();

    MyClass(string s);

    MyClass(int i, int y = 0);
}

這裡的MyClass(string s)函數和MyClass(int i, int y = 0)函數都是可能只需傳一個參數的默認構造函數

看一下使用構造函數構造類對象的情況:

  • MyClass obj1;//OK,調用了MyClass()
  • MyClass obj2(string("Hello World!"));//OK,調用了MyClass(string s)
  • MyClass obj3(12, 12);//OK,調用了MyClass(int i, int y = 0)
  • MyClass obj4(12);//同上
  • MyClass obj5 = 12;//同上。但是對於obj5,實際上等價於MyClass temp(12);MyClass obj5(temp);//也就是說默認調用了默認拷貝構造函數。這就是所謂的隱式調用。

大部分情況下,隱式調用都會產生bug,而且很難察覺。基於此,C++引入explict關鍵字關閉這種隱式調用,避免因為隱式調用而產生的bug。

Copyright © Linux教程網 All Rights Reserved