C 關鍵字explicit的用法

2021-08-25 12:33:35 字數 1475 閱讀 4840

explicit是顯示的意思。而且只能修飾建構函式。

因為在類的建構函式中,凡是只帶乙個引數的建構函式,都定義了一組隱式轉化——把建構函式型別轉換為該類的型別。

比如:class

explicit

virtual

~explicit( )

}; 則:呼叫:

explicit e = 1;

列印:explicit 建構函式[1].

explicit 析構函式[1].

呼叫:voidfun(

explicite)

fun(1);

列印:explicit 建構函式[1].

explicit 析構函式[1].

fun(1)相當於:

tmp只在{}內有效,執行到{}外則釋放掉tmp

注意:一:如果有下定義:

class

number

virtual

~number( )

}; voidfunc(

numbern)

func(1);

編譯會報錯:: 錯誤:請求從 『int』 轉換到非標量型別 『number——也就是編譯器不會先把1轉化為explicit再轉化為number

注意:二:

doublei = 1.01;

fun(i);

編譯器會首先做乙個型別轉換,將double 型別轉換為int型別。但是會有告警。

在建構函式前面加上關鍵字「explicit」可以消除這種隱式轉化:

explicit explicit(inti )

編譯會議提示錯誤:: 錯誤:請求從 『int』 轉換到非標量型別 『explicit』

被宣告為explicit的建構函式比其non-explicit建構函式更好一些,因為他可以禁止編譯器執行非預期的型別轉換。

C 關鍵字explicit的用法

c 關鍵字explicit,可以阻止不應該允許的經過轉換建構函式進行的隱式轉換的發生,宣告為explicit的建構函式不能在隱式轉換中使用。c 中,帶有乙個形參的建構函式 或者除了第乙個引數外其餘引數都有預設值的多參建構函式 承擔了兩個角色。1 是類的帶參建構函式 2 是預設且隱含的型別轉換操作符。...

C 關鍵字explicit的用法

下面c 程式的輸出 include using namespace std class complex a method to compare two complex numbers bool operator complex rhs int main 輸出 編譯通過,產生輸出。same 在c 中,...

explicit 關鍵字的用法

explicit 關鍵字的用法 只有乙個引數的建構函式在預設情況下隱含乙個轉換操作符,對沒有引數或引數個數大於 1 個的建構函式沒有此問題 看後面的特別說明 class x int m a int m b double m c x x int a 如果做如下呼叫 x x 10 10 被隱式轉化成了 ...