1. 程式人生 > >C++ 中的explicit關鍵字

C++ 中的explicit關鍵字

操作符 希望 疑惑 ive 有一個 編譯器 自動類型轉換 幫我 con

explicit關鍵字在c++中是為了防止隱式轉換

(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;

明白隱式轉換在我們自己寫類的時候,尤其是些操縱內存的類的時候很有用。

C++ 中的explicit關鍵字