C++關鍵字explicit有什麼作用?
阿新 • • 發佈:2021-07-27
C++關鍵字explicit作用:
用來修飾類的建構函式,表明該建構函式是顯式的,既然有"顯式"那麼必然就有"隱式",那麼什麼是顯示,什麼又是隱式的呢?
如果C++類的建構函式有一個引數,那麼在編譯的時候就會有一個預設的轉換操作:將該建構函式對應資料型別的資料轉換為該類物件。
/************************************************************************* > File Name: 8.3.explicitfoo.cpp > Author: > Mail: > Created Time: Mon Jul 26 18:02:25 2021 ************************************************************************/ #include<stdio.h> #include<iostream> using namespace std; class Myclass { public: explicit Myclass(int num) : m_num(num) { printf("constructor num = %d\n", num); } // explicit: // 1> 只能在類的內部宣告使用,而不能在類的外部宣告; // 2> 只能修飾一個引數的建構函式。對於多個引數的建構函式無任何意義; // 3> 聲明瞭之後,就不允許隱式轉換! // explicit 修飾多個引數建構函式無任何意義! explicit Myclass(int i, float f, double d) { printf("constructor i = %d, f = %f, d = %lf\n", i, f, d); } private: int m_num; }; int main(void) { Myclass obj1 = (Myclass)100.123; Myclass obj2(int(200)); Myclass obj3(100.123, 200.123f, 300.123); Myclass obj4('a', 200.123f, 300.123); return 0; }
程式碼截圖:
執行結果: