C 顯示轉換關鍵字explicit詳解

2021-10-04 20:37:56 字數 1804 閱讀 3311

想要理解顯示轉換,首先得明白與之對應得隱式轉換是什麼。

隱式轉換關鍵字是implicit, 意思是隱藏的,類建構函式預設情況下即宣告為implicit(隱式),且不顯示出來,因此常常被我們所忽略。下面詳細講解隱式轉換得過程

假如乙個類a的建構函式是a(int i),

則在變數宣告的時候,既用a a(1);,

又可以使用隱式轉換a a=1;這一步中間省略的操作為a temp(1); a a=temp;

因此1可以通過建構函式a(int i)轉換為乙個類a的物件。(隱含的型別轉換操作符)

具體過程見如下**所示

//cxstring 隱式建構函式

class

cxstring

cxstring

(const

char

* p)};

cxstring string1(24

);// 這樣是ok的, 為cxstring預分配24位元組的大小的記憶體

//編譯會有乙個隱式轉換:將該建構函式對應資料型別的資料轉換為該類物件.

//cxstring temp(10);

//cxstring string2 = temp;

// 所以這樣是ok的, 為cxstring預分配10位元組的大小的記憶體

cxstring string2 =

10;

cxstring string3;

// 這樣是不行的, 因為沒有預設建構函式, 錯誤為: 「cxstring」: 沒有合適的預設建構函式可用

cxstring string4

("aaaa");

// 這樣是ok的

cxstring string5 =

"bbb"

;// 這樣也是ok的,

cxstring string6 =

'c';

// 這樣也是ok的, 其實呼叫的是cxstring(int size), 且size等於'c'的ascii碼

string1 =2;

// 這樣也是ok的, 為cxstring預分配2位元組的大小的記憶體

string2 =3;

// 這樣也是ok的, 為cxstring預分配3位元組的大小的記憶體

string3 = string1;

// 這樣也是ok的, 至少編譯是沒問題的, 但是如果析構函式裡用free釋放_pstr記憶體指標的時候可能會報錯, 完整的**必須過載運算子"=", 並在其中處理記憶體釋放

上述**中,cxstring string6 = 『c』; 其實就是隱式轉換所帶來的弊端,使得物件宣告的時候開闢了錯誤大小的初始空間。c++為我們簡化操作,獲得方便得同時,也會出現一些與之對應問題。而因為這個問題引入explicit,顯示變換。

c++中的explicit關鍵字只能用於修飾只有乙個引數的類建構函式, 它的作用是表明該建構函式是顯示的

//cxstring 顯示建構函式

class

cxstring2

cxstring2

(const

char

* p)};

//顯示建構函式不會進行隱式轉換 顧這樣寫是錯誤的

cxstring2 string7 =10;

//只能這樣進行初始化

cxstring2 string8(10

);string8 =10;

//這樣寫也不行,因為已經不允許進行隱式變換

explicit關鍵字的作用就是防止類建構函式的隱式自動轉換.

C 轉換關鍵字

implicit為隱式的轉換 explicit為顯示的轉換 通過這種方法可以有效地驗證資料,對引數進行處理。不管是否實用,在此先記錄下來 以後回顧用 class 轉換關鍵字 set public myage private myage int32 age 整型到myage 的隱式轉換 public ...

C 隱式轉換關鍵字 implicit

implicit關鍵字用於宣告隱式的使用者定義型別轉換運算子。如果可以確保轉換過程不會造成資料丟失,則可使用該關鍵字在使用者定義型別和其他型別之間進行隱式轉換。引用摘自 implicit c 參考 仍以student求和舉例 class student 數學成績 public double math...

C 顯式轉換關鍵字 explicit

不同於隱式轉換,顯式轉換運算子必須通過轉換的方式來呼叫。如果轉換操作會導致異常或丟失資訊,則應將其標記為explicit。這可阻止編譯器靜默呼叫可能產生意外後果的轉換操作。省略轉換將導致編譯時錯誤 cs0266。該引用摘自 explicit c 參考 顯示轉換關鍵字explicit能向閱讀 的每個人...