C 中explicit的用法

2021-08-19 06:54:21 字數 780 閱讀 4437

c++提供了關鍵字explicit,可以阻止不應該允許的經過轉換建構函式進行的隱式轉換的發生,宣告為explicit的建構函式不能在隱式轉換中使用。

c++中, 乙個引數的建構函式(或者除了第乙個引數外其餘引數都有預設值的多參建構函式), 承擔了兩個角色。 

1 是個構造;2 是個預設且隱含的型別轉換操作符。

所以, 有時候在我們寫下如 aaa = ***, 這樣的**, 且恰好***的型別正好是aaa單引數構造器的引數型別, 這時候編譯器就自動呼叫這個構造器, 建立乙個aaa的物件。

這樣看起來好象很酷, 很方便。 但在某些情況下, 卻違背了程式設計師的本意。 這時候就要在這個構造器前面加上explicit修飾, 指定這個構造器只能被明確的呼叫/使用, 不能作為型別轉換操作符被隱含的使用。

解析:explicit建構函式是用來防止隱式轉換的。請看下面的**:

#include using namespace std;  

class test1

private:

int n;

};

class test2

private:

int n;

};

int main()

編譯時,會指出 t3那一行error:無法從「int」轉換為「test2」。而t1卻編譯通過。注釋掉t3那行,除錯時,t1已被賦值成功。

注意:當類的宣告和定義分別在兩個檔案中時,explicit只能寫在在宣告中,不能寫在定義中。

C 中 explicit的用法

explicit 是避免建構函式的引數自動轉換為類物件的識別符號 cpp view plain copy include using namespace std class a intmain 上面的 編譯不成功,原因是當顯式地定義了乙個帶乙個引數的建構函式 帶explicit 必須要顯示地呼叫建構...

C 中 explicit的用法

explicit 是避免建構函式的引數自動轉換為類物件的識別符號 cpp view plain copy include using namespace std class a intmain 上面的 編譯不成功,原因是當顯式地定義了乙個帶乙個引數的建構函式 帶explicit 必須要顯示地呼叫建構...

C 中explicit的作用

explicit作用 在c 中,explicit關鍵字用來修飾類的建構函式,被修飾的建構函式的類,不能發生相應的隱式型別轉換,只能以顯示的方式進行型別轉換。explicit使用注意事項 1.explicit 關鍵字只能用於類內部的建構函式宣告上 2.explicit 關鍵字作用於單個引數的建構函式 ...