這樣看起來好象很酷, 很方便。 但在某些情況下(見下面權威的例子), 卻違背了我們(程序員)的本意。 這時候就要在這個構造器前面加上explicit修飾, 指定這個構造器只能被明確的調用,使用, 不能作爲類型轉換操作符被隱含的使用。 呵呵,
看來還是光明正大些比較好。
explicit構造函數的作用
解析:
explicit構造函數是用來防止隱式轉換的。請看下面的代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
class Test1 { public : Test1( int n)
{ num = n; } //普通構造函數 private : int num; }; class Test2 { public : explicit Test2( int n)
{ num = n; } //explicit(顯式)構造函數 private : int num; }; int
main() { Test1
t1 = 12; //隱式調用其構造函數,
成功 Test2
t2 = 12; //編譯錯誤,不能隱式調用其構造函數 Test2
t3(12); //顯式調用成功 return 0; } |