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詳解
想要理解顯示轉換,首先得明白與之對應得隱式轉換是什麼。隱式轉換關鍵字是implicit,意思是隱藏的,類建構函式預設情況下即宣告為implicit 隱式 且不顯示出來,因此常常被我們所忽略。下面詳細講解隱式轉換得過程 假如乙個類a的建構函式是a int i 則在變數宣告的時候,既用a a 1 又可以...
C 中顯示型別轉換
c 引入了 const cast,reinterpret cast 之類的新的顯式型別轉換方式,不僅大多數 c 程式設計師覺得不是很習慣,就連某些有經驗的c 程式設計師都會在一些細節上犯錯。誠然,既然我們可以簡單的寫出 int i int p p is a pointer 這樣的顯式轉換,為什麼還要...
C 型別轉換函式 與 explicit
在c 中,可以使用建構函式將乙個指定型別的資料轉換為類的物件,也可以使用型別轉換函式 type conversion function 將乙個類物件轉換為其他型別的資料。我們直接通過乙個簡單的 介紹轉換函式 include using namespace std class fraction ope...