先上一段程式碼, 這段程式碼竟然可以編譯過,我的老天!
class boo
};void do_something(boo b)
int main()
照字面來理解,函式 do_something( ) 只能接受 boo 型態的引數, 但是 compiler 看見 boo 的建構函式後,自動來個隱式轉換,將do_something(3)
轉成do_something(b(3))
,於是編譯就通過了。c++竟然允許這樣子的事默默發生,我該說是聰明還是骯髒呢?
看見這個特性之後,我才驚覺原來之前這樣子寫行得通的原因就是建構函式隱式轉換
void foo( string kerker )
int main()
因為foo("kerker"); 被偷偷轉換為 foo(string("kerker"));
實際上是這樣子阿,難怪 char* 跟 string 好像無接縫連線了一樣,不過我還是不喜歡這個特性。
C 隱式型別轉換
c 定義了一組內建型別物件之間的轉換標準,在必要時它們被編譯器隱式的應用到物件上。發生隱式型別轉換的情景 1,在混合型別的算術表示式中 轉換原則 轉換為最寬的資料型別。也可叫,算術轉換。int ival 5 double dval 3.14 ival 被提公升為double型別 ival dval ...
C 隱式型別轉換
眾所周知,c 的基本型別中並非完全的對立,部分資料型別之間是可以進行隱式轉換的。所謂隱式轉換,是指不需要使用者干預,編譯器私下進行的型別轉換行為。很多時候使用者可能都不知道進行了哪些轉換。c 物件導向的多型特性,就是通過父類的型別實現對子類的封裝。通過隱式轉換,你可以直接將乙個子類的物件使用父類的型...
C 隱式型別轉換
c primer 中提到 可以用 單個形參來呼叫 的建構函式定義了從 形參型別 到 該類型別 的乙個隱式轉換。這裡應該注意的是,可以用單個形參進行呼叫 並不是指建構函式只能有乙個形參,而是它可以有多個形參,但那些形參都是有預設實參的。那麼,什麼是 隱式轉換 呢?上面這句話也說了,是從 建構函式形參型...