普通的建構函式可以被顯式呼叫和隱試呼叫,但是explicit的建構函式只能被顯式的呼叫,不能被隱試的呼叫。**示例如下:
class test0
};class test1
};int main(int argc, char *ar**)
分析如下**
#include
#include
using namespace std;
class test1
explicit test1(short) :type("short"){}//2.由於這裡使用了explicit,所以不能夠被隱試轉換。於是42自動轉換為int型,檢查int的建構函式能否被隱試轉換。
test1(int) :type("int"){}//3.沒有被宣告為explicit顯示呼叫,因此呼叫此建構函式造出乙個臨時物件。最終輸出結果就是int
};void show(const test1& n)
int main(int argc, char *ar**)
C 中的explicit建構函式
c explicit建構函式 explicit按字面意思是明確的,顯式的。在c 類中只要定義的建構函式編譯器就不會幫你生成預設建構函式。按照預設規定,只有乙個引數的建構函式也定義了乙個隱式轉換,將該建構函式對應資料型別的資料轉換為該類物件,如下面所示 class string string str ...
explicit建構函式
按照預設規定,只有乙個引數的建構函式也定義了乙個隱式轉換,將該建構函式對應資料型別的資料轉換為該類物件,如下面所示 class string string s1 hello ok 隱式轉換,等價於string s1 string hello 但是有的時候可能會不需要這種隱式轉換,如下 class s...
explicit建構函式
在閱讀slicer原始碼時,遇見explicit修飾的建構函式,比較迷惑 explicit qslicerigsreadermodule qobject parent 0 下面就解釋這個問題。按照預設規定,只有乙個引數的建構函式也定義了乙個隱式轉換,將該建構函式對應資料型別的資料轉換為該類物件,如下...