【C++ 基礎】C++中的explicit
C++提供了關鍵字explicit,可以阻止不應該允許的經過轉換構造函數進行的隱式轉換的發生。聲明為explicit的構造函數不能在隱式轉換中使用。
C++中, 一個參數的構造函數(或者除了第一個參數外其余參數都有默認值的多參構造函數), 承擔了兩個角色。
1.是個構造器 2. 是個默認且隱含的類型轉換操作符。
所以, 有時候在我們寫下如 ClassA a = b, 這樣的代碼, 且恰好b的類型正好是ClassA單參數構造器的參數類型, 這時候編譯器就自動調用這個構造器, 創建一個ClassA的對象。
#include "stdafx.h"
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 _tmain(int argc, _TCHAR* argv[])
{
Test1 t1 = 12; //隱式調用其構造函數。 12是 Test1的默認構造函數的參數類型,調用成功
Test2 t2 = 12; //編譯錯誤,不能隱式調用其構造函數
Test2 t3(12); //顯式調用成功
return 0;
}

浙公網安備 33010602011771號