c++提供了
關鍵字explicit,可以阻止不應該允許的經過
轉換建構函式
進行的隱式轉換的發生。宣告為explicit的
建構函式
不能在隱式轉換中使用。
c++中, 乙個引數的建構函式(或者除了第乙個引數外其餘引數都有預設值的多參建構函式), 承擔了兩個角色。 1 是個構造器 ,2 是個預設且隱含的型別轉換操作符。
所以, 有時候在我們寫下如 aaa = ***, 這樣的**, 且恰好***的型別正好是aaa單引數構造器的引數型別, 這時候編譯器就自動呼叫這個構造器, 建立乙個aaa的物件。
這樣看起來好象很酷, 很方便。 但在某些情況下(見下面權威的例子), 卻違背了我們(程式設計師)的本意。 這時候就要在這個構造器前面加上explicit修飾, 指定這個構造器只能被明確的呼叫/使用, 不能作為型別轉換操作符被隱含的使用。
explicit建構函式的作用
解析:explicit建構函式是用來防止隱式轉換的。請看下面的**:
class
test1
//普通建構函式
private
:
int
num;
};
class
test2
//explicit(顯式)建構函式
private
:
int
num;
};
int
main()
test1的建構函式帶乙個int型的引數,**23行會隱式轉換成呼叫test1的這個建構函式。而test2的建構函式被宣告為explicit(顯式),這表示不能通過隱式轉換來呼叫這個建構函式,因此**24行會出現編譯錯誤。
普通建構函式能夠被隱式呼叫。而explicit建構函式只能被顯式呼叫。
C 中explicit的作用
explicit作用 在c 中,explicit關鍵字用來修飾類的建構函式,被修飾的建構函式的類,不能發生相應的隱式型別轉換,只能以顯示的方式進行型別轉換。explicit使用注意事項 1.explicit 關鍵字只能用於類內部的建構函式宣告上 2.explicit 關鍵字作用於單個引數的建構函式 ...
C 中explicit的作用
explicit用來防止建構函式定義中的隱式轉換 隱式轉換 可以用單個實參來呼叫的建構函式定義了從形參型別到該類型別的乙個隱式轉換。class things intcompareto const things other std string m name int height int weight...
C 中explicit關鍵字的作用
explicit用來防止由建構函式定義的隱式轉換。要明白它的作用,首先要了解隱式轉換 可以用單個實參來呼叫的建構函式定義了從形參型別到該類型別的乙個隱式轉換。例如 class things intcompareto const things other std string m name inthe...