重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
最近在復習QT,準備做項目了,QT Creator 默認生成的代碼 explicit Dialog(QWidget *parent = 0)中,有這么一個關鍵字explicit ,用來修飾構造函數。以前在Windows下寫程序的時候,基本上沒有碰到這個關鍵字,那么這個關鍵字是做什么用的呢?
關鍵字 explicit 可以禁止“單參數構造函數”被用于自動類型轉換。光看這一句似乎不太容易明白,下面,舉個簡單地例子。
//main.cpp
#include
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) 。
另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。