内容:
在C++語言中有這樣一個關鍵字explicit,也許你不經常用到它或者壓根就根本就沒有見過它,
那這個關鍵字到底有什麼作用呢?C++語言标準中為什麼要将它作為一個關鍵字标準列入标準當中
呢?帶着這些問題我們稍微地認識一下這個"家夥",呵呵.
我們先來看一段code:
class TestClass{
public:
TestClass(int value):value_(value){}
...
private:
int value_;
};
接下來我們開始使用這個類:
//test.cpp
...
TestClass myClass(10);
...
這樣寫,OK!,沒問題,不過如果我改成另外一種寫法:
TestClass myClass = 10;//嗯??是不是覺的看起來有點不那麼舒服,呵呵!
...
這樣寫的結果,其實還是沒問題,為什麼呢?原因在于編譯器在編譯這條語句的時候用進行了一個
預設的隐式轉換操作,它把這裡TestClass myClass = 10;轉換為TestClass myClass(10);哇!它怎麼
做出這樣的事情呢?我壓根就沒想讓它這麼做,真是不可原諒,那麼我們有沒有什麼辦法不讓編譯器進
行這中莫名其妙的轉換呢?當然有!這個時候我們的主角explicit就閃亮登場了,哒哒哒哒..
explicit就是為阻止這種轉換而生的,它提供給了程式員對自己寫的代碼所産生預期結果的更多
控制,我們添加了關鍵字後,代碼變為:
class TestClass{
public:
explicit TestClass(int value):value_(value){}
...
private:
int value_;
};
再次編譯test.cpp:
TestClass myClass = 10;// error :'initializing' : cannot convert from 'int' to 'TestClass'
嘎嘎..,沒編譯過,這結果正是我們想要的,因為explicit的修飾使的編譯器不再為這段代碼産生
等價的轉換代碼.現在你知道explicit關鍵字的作用了吧?
請記住:
◆explicit關鍵字阻止了編譯器對單參類構造函數的隐式轉換.
◆explicit隻對隻有一個參數的構造函數類起作用