C 中 explicit的用法

2021-07-04 18:29:12 字數 1082 閱讀 2087

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 關鍵字作用於單個引數的建構函式 ...