Explicit關鍵字的作用
explicit,和構造函數一起使用.
explicit constructor指明構造函數只能顯示使用,目的是爲了防止不必要的隱式轉化.
舉個例子:
有這樣一段代碼:
class A
{
public:
A(int);
private:
int num;
};
int Test(const A&) // 一個應用函數
{
...
}
Test(2); // 正確
過程是這樣的: 編譯器知道傳的值是int而函數需要的是A類型,但它也同時知道調用A的構造函數將int轉換成一個合適的A,所以纔有上面成功的調用.換句話說,編譯器處理這個調用時的情形類似下面這樣:
const A temp(2); // 從2產生一個臨時A對象
Test(temp); // 調用函數
如果代碼寫成如下樣子:
class A
{
public:
explicit A(int);
private:
int num;
};
int Test(const A&) // 一個應用函數
{
...
}
Test(2); // 失敗,不能通過隱式類型轉換將int類型變量構造成成A類型變量
explicit constructor指明構造函數只能顯示使用,目的是爲了防止不必要的隱式轉化.
舉個例子:
有這樣一段代碼:
class A
{
public:
A(int);
private:
int num;
};
int Test(const A&) // 一個應用函數
{
...
}
Test(2); // 正確
過程是這樣的: 編譯器知道傳的值是int而函數需要的是A類型,但它也同時知道調用A的構造函數將int轉換成一個合適的A,所以纔有上面成功的調用.換句話說,編譯器處理這個調用時的情形類似下面這樣:
const A temp(2); // 從2產生一個臨時A對象
Test(temp); // 調用函數
如果代碼寫成如下樣子:
class A
{
public:
explicit A(int);
private:
int num;
};
int Test(const A&) // 一個應用函數
{
...
}
Test(2); // 失敗,不能通過隱式類型轉換將int類型變量構造成成A類型變量
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.