C 中 explicit顯示轉換

2021-07-13 21:43:10 字數 1071 閱讀 5014

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...