explicit 是避免建構函式的引數自動轉換為類物件的識別符號
[cpp]
view plain
copy
#include
using
namespace
std;
class
a
};
intmain()
上面的**編譯不成功,原因是當顯式地定義了乙個帶乙個引數的建構函式( 帶explicit),必須要顯示地呼叫建構函式,
a a(10);
如果不加 explicit的話
a a=10;
實際的轉換過程如下:
相當於直接呼叫a(10);
(1)explicit
此關鍵字只能對使用者自己定義的物件起作用,不對預設建構函式起作用
此關鍵字只能夠修飾建構函式。而且建構函式的引數只能有乙個。。
(2)何時用explicit
當我們不希望自動型別轉換的時候用,其實標準庫好多建構函式都是explicit的
比如說vector ivec(10); //這種定義看起來一目了然
不能寫成vector 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的用法
explicit 是避免建構函式的引數自動轉換為類物件的識別符號 cpp view plain copy include using namespace std class a intmain 上面的 編譯不成功,原因是當顯式地定義了乙個帶乙個引數的建構函式 帶explicit 必須要顯示地呼叫建構...
C 中explicit的用法
c 提供了關鍵字explicit,可以阻止不應該允許的經過轉換建構函式進行的隱式轉換的發生,宣告為explicit的建構函式不能在隱式轉換中使用。c 中,乙個引數的建構函式 或者除了第乙個引數外其餘引數都有預設值的多參建構函式 承擔了兩個角色。1 是個構造 2 是個預設且隱含的型別轉換操作符。所以,...
C 中explicit的作用
explicit作用 在c 中,explicit關鍵字用來修飾類的建構函式,被修飾的建構函式的類,不能發生相應的隱式型別轉換,只能以顯示的方式進行型別轉換。explicit使用注意事項 1.explicit 關鍵字只能用於類內部的建構函式宣告上 2.explicit 關鍵字作用於單個引數的建構函式 ...