【explicit關鍵字:建構函式前面出現的關鍵字】
阿新 • • 發佈:2018-12-30
百度explicit,他會這樣說:表示這個函式不能被隱式轉換。但我還是不得它的真意。
但是,我們可以看個例子就明白了它的用法和它所防止出現的錯誤。
1 class Test1
2 {
3 public:
4 Test1(int n) { num = n; } //普通建構函式
5 private:
6 int num;
7 };
8
9 class Test2
10 {
11 public:
12 explicit Test2(int n) { num = n; } //explicit(顯式)建構函式
13 private:
14 int num;
15 };
16
17 int main()
18 {
19 Test1 t1 = 12; //隱式呼叫其建構函式, 成功
20 Test2 t2 = 12; //編譯錯誤,不能隱式呼叫其建構函式
21 Test2 t3(12); //顯示呼叫成功
22 return 0;
23 }
看最後3個建構函式就知道了
(1)19行的,構造成功; 雖然程式碼中沒有傳入引數,但是它隱式呼叫了Test1(int n) { num = n; }
(2)20行的,錯誤;explicit 關鍵字不允許隱式的轉換,必須如21行那樣明確傳入引數