您好,登錄后才能下訂單哦!
最近在復習QT,準備做項目了,QT Creator 默認生成的代碼 explicit Dialog(QWidget *parent = 0)中,有這么一個關鍵字explicit ,用來修飾構造函數。以前在Windows下寫程序的時候,基本上沒有碰到這個關鍵字,那么這個關鍵字是做什么用的呢?
關鍵字 explicit 可以禁止“單參數構造函數”被用于自動類型轉換。光看這一句似乎不太容易明白,下面,舉個簡單地例子。
//main.cpp
#include <iostream>
using namespace std;
class Test
{
public:
Test(int a)
{
m_data = a;
}
void show()
{
cout << "m_data = " << m_data << endl;
}
private:
int m_data;
};
void main(void)
{
Test t = 2; // 將一個常量賦給了一個對象
t.show();
}
編譯能夠通過,執行結果:m_data = 2。
為什么會這樣呢?原來C++通過隱式轉換,構造了一個臨時對象Test(2),將它賦給了t(這里調用了默認的構造函數,而不是重載的“=”,因為這是在對象創建的時候)。那么,如果給構造函數加上關鍵字 explicit ,構造函數變成了 explicit Test(int a),再次編譯,編譯器就會報錯。這時,就只能顯式地使用構造函數了Test t = Test(2) 。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。