標籤:
explicit 是避免建構函式的參數自動轉換為類對象的標識符#include <iostream>using namespace std;class A{public: explicit A(int a) { cout<<"建立類成功了!"<<endl; } };int main(){ A a=10; return 0;}上面的代碼編譯不成功,原因是當顯式地定義了一個帶一個參數的建構函式( 帶explicit),必須要顯示地調用建構函式,A a(10);如果不加 explicit的話A a=10;實際的轉換過程如下:相當於直接調用A(10);(1)explicit此關鍵字只能對使用者自己定義的對象起作用,不對預設建構函式起作用此關鍵字只能夠修飾建構函式。而且建構函式的參數只能有一個。。(2)何時用explicit當我們不希望自動類型轉換的時候用,其實標準庫好多建構函式都是explicit的比如說vector <int> ivec(10); //這種定義看起來一目瞭然不能寫成vector <int> ivec=10;//此種定義讓程式員感到疑惑(3)何時不用explicit當我們需要隱式轉換的時候比如說String類的一個建構函式String(const char*); 定義成這樣的好處,在需要隱式轉化的時候編譯器會自動地幫我們轉換,標準庫裡面的String就是一個好的證明。具體來說: 我們可以這樣String str="helloworld";//直接調用建構函式 String str="hello"+str+"world"; 調用重載的+操作符號,此過程相當於:String temp("hello"); //調用建構函式String str=temp+str;String t("world");//調用建構函式String str=str+t;明白隱式轉換在我們自己寫類的時候,尤其是些操縱記憶體的類的時候很有用。 轉載自:http://blog.csdn.net/acdnjjjdjkdckjj/article/details/5644573
C++中 explicit的用法