Qt 中C++ 的explicit 關鍵字
阿新 • • 發佈:2019-01-27
在Qt中,我們經常都看到這樣的函式宣告:
public:
explicit MyAction(QObject *parent = nullptr);
有這個explicit 關鍵字,那麼它的作用是什麼呢?
關鍵字 explicit 可以禁止“單引數建構函式”被用於自動型別轉換,宣告為explicit的建構函式不能在隱式轉換中使用, C++中, 一個引數的建構函式(或者除了第一個引數外其餘引數都有預設值的多參建構函式), 承擔了兩個角色。一是個構造器,二是個預設且隱含的型別轉換操作符。通過程式碼感受一下:
#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;
};
class Test2
{
public:
explicit Test2(int a)
{
m_data2 = a;
}
void show2()
{
cout << "m_data2 = " << m_data2 << endl;
}
private:
int m_data2;
};
int main(void)
{
Test t = 2; // 將一個常量賦給了一個物件
t.show();
//Test2 t3 =5; //error:需要顯示的使用建構函式
Test2 t2 =Test2(5);
t2.show2();
return 0;
}
輸出結果是:
m_data = 2
m_data2 = 5