眾所周知,c++的基本型別中並非完全的對立,部分資料型別之間是可以進行隱式轉換的。
所謂隱式轉換,是指不需要使用者干預,編譯器私下進行的型別轉換行為。很多時候使用者可能都不知道進行了哪些轉換。
c++物件導向的多型特性,就是通過父類的型別實現對子類的封裝。
通過隱式轉換,你可以直接將乙個子類的物件使用父類的型別進行返回。
在比如,數值和布林型別的轉換,整數和浮點數的轉換等。
某些方面來說,隱式轉換給c++程式開發者帶來了不小的便捷。
c++是一門強型別語言,型別的檢查是非常嚴格的。
如果沒有型別的隱式轉換,這將給程式開發者帶來很多的不便。
當然,凡事都有兩面性,在你享受方便快捷的一面時,你不得不面對太過智慧型以至完全超出了你的控制。
風險就在不知不覺間出現。
#參考:
#以上四種情況下的隱式轉換,都滿足了乙個基本原則:低精度 –》 高精度轉換。
不滿足該原則,隱式轉換是不能發生的。
當然這個時候就可以使用與之相對於的顯式型別轉換(又稱強制型別轉換),使用方法如下:
double a = 2.0;
int b = (int)a;
使用強制型別轉換會導致精度的損失,因此使用時務必確保你已經擁有足夠的把握。
隱式轉換的風險一般存在於自定義的類建構函式中。
按照預設規定,只有乙個引數的建構函式也定義了乙個隱式轉換,將該建構函式對應資料型別的資料轉換為該類物件。
既然隱式轉換存在這麼多的風險,那如何能夠禁止隱式轉換的發生呢。
c++中提供了explicit關鍵字,在建構函式宣告的時候加上explicit關鍵字,能夠禁止隱式轉換。使用方法如下:
1
2
3
4
5
6
class
test
加上該關鍵字以後,如下的操作是合法的:
1
test(10);
如下的操作就變成非法的了:
1
test aa = 10;
這樣就可以有效的防止隱式轉換的發生,從而能夠對程式進行精確控制,達到提高品質的目的。
C 隱式型別轉換
c 定義了一組內建型別物件之間的轉換標準,在必要時它們被編譯器隱式的應用到物件上。發生隱式型別轉換的情景 1,在混合型別的算術表示式中 轉換原則 轉換為最寬的資料型別。也可叫,算術轉換。int ival 5 double dval 3.14 ival 被提公升為double型別 ival dval ...
C 隱式型別轉換
c primer 中提到 可以用 單個形參來呼叫 的建構函式定義了從 形參型別 到 該類型別 的乙個隱式轉換。這裡應該注意的是,可以用單個形參進行呼叫 並不是指建構函式只能有乙個形參,而是它可以有多個形參,但那些形參都是有預設實參的。那麼,什麼是 隱式轉換 呢?上面這句話也說了,是從 建構函式形參型...
C 隱式型別轉換
可以用單個形參來呼叫的建構函式定義了從 形參型別 到 該類型別 的乙個隱式轉換。這裡應該注意的是,可以用單個形參進行呼叫 並不是指建構函式只能有乙個形參,而是它可以有多個形參,但那些形參都是有預設實參的。可以用單個形參來呼叫的建構函式有2種呼叫方式 隱式呼叫和顯示呼叫 以如下類為例 class a ...