1. 程式人生 > >Qt 中C++ 的explicit 關鍵字

Qt 中C++ 的explicit 關鍵字

在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