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 被隱式轉化成了 ...