C 中的explicit關鍵字

2021-09-24 09:06:47 字數 767 閱讀 9308

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關鍵字

c 中的explicit關鍵字用來修飾類的建構函式,表明該建構函式是顯式的。既然有 顯式 那麼必然就有 隱式 那麼什麼是顯示而什麼又是隱式的呢?按照預設規定,只有乙個引數的建構函式也定義了乙個隱式轉換,將該建構函式對應資料型別的資料轉換為該類物件,如下面所示 include using namesp...

c 中的explicit關鍵字

c 中的explicit關鍵字 c 中的explicit關鍵字用來修飾類的建構函式,表明該建構函式是顯式的,既然有 顯式 那麼必然就有 隱式 那麼什麼是顯示而什麼又是隱式的呢?如果c 類的建構函式有乙個引數,那麼在編譯的時候就會有乙個預設的轉換操作 將該建構函式對應資料型別的資料轉換為該類物件,如下...

c 中的explicit關鍵字

c 中的explicit關鍵字用來修飾類的建構函式,表明該建構函式是顯式的,既然有 顯式 那麼必然就有 隱式 那麼什麼是顯示而什麼又是隱式的呢?如果c 類的建構函式有乙個引數,那麼在編譯的時候就會有乙個預設的轉換操作 將該建構函式對應資料型別的資料轉換為該類物件,如下面所示 class myclas...