Qt C++中的關鍵字explicit

關鍵字 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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章