關於c++中的explicit關鍵字
在c++中,explicit關鍵字是用來修飾類的建構函式的。含有被該關鍵字修飾過的建構函式的類,
將不能進行隱式型別轉換,型別轉換只能顯式進行。並且需要注意的是該關鍵字僅用於類內的建構函式的宣告上。
例如:
#include class ball
ball(int x=0,int y=0,int z=0): x(x),y(y),z(z){}
ball( ball& b):r(b.getr()),x(b.getx()),y(b.gety()),z(b.getz()){}
~ball(){}
double getr()
int getx()
int gety()
int getz()
private:
double r; // 半徑
int x,y,z; // 球心空間三維座標
};
class ball2 // 使用explicit關鍵字修飾構造
explicit ball2(int x=0,int y=0,int z=0,double r=0.0):x(x),y(y),z(z),r(r){}
explicit ball2( ball& b):r(b.getr()),x(b.getx()),y(b.gety()),z(b.getz()){}
~ball2(){}
double getr()
int getx()
int gety()
int getz()
private:
double r; // 半徑
int x,y,z; // 球心空間三維座標 };
int main(void)
; //這段**是成立的
//這裡含有乙個隱式的轉換
//temp =ball; ball a;
ball b = ; //這裡同樣的也包含了隱式轉換
// ball2就可以避免這種隱式轉換了
ball2 a2;
ball2 b2;
// 還用一種比較容易出現的問題,涉及到之前的元素初始化方式的不統一
// 下面的這段**是非常容易出錯的,這種寫法是錯誤的
//ball2 c = ;
return 0;
}
關於C 中的explicit關鍵字
explicit,和建構函式一起使用.explicit constructor指明建構函式只能顯示使用,目的是為了防止不必要的隱式轉化.舉個例子 有這樣一段 class a int test const a 乙個應用函式 test 2 正確 過程是這樣的 編譯器知道傳的值是int而函式需要的是a型別...
c 中explicit關鍵字
c 中的explicit關鍵字用來修飾類的建構函式,表明該建構函式是顯式的。既然有 顯式 那麼必然就有 隱式 那麼什麼是顯示而什麼又是隱式的呢?按照預設規定,只有乙個引數的建構函式也定義了乙個隱式轉換,將該建構函式對應資料型別的資料轉換為該類物件,如下面所示 include using namesp...
c 中的explicit關鍵字
c 中的explicit關鍵字 c 中的explicit關鍵字用來修飾類的建構函式,表明該建構函式是顯式的,既然有 顯式 那麼必然就有 隱式 那麼什麼是顯示而什麼又是隱式的呢?如果c 類的建構函式有乙個引數,那麼在編譯的時候就會有乙個預設的轉換操作 將該建構函式對應資料型別的資料轉換為該類物件,如下...