這段程式竟然可以編譯過,我的老天!
```cpp class Boo { Boo(int c){ cout<<"I’m Boo"; } };
void do_something(Boo b){
// …
}
int main(){ do_something(3); } ```
照字面來理解,函數 dosomething( ) 只能接受型態為 Boo 的參數, 但是 compiler 看見 Boo 的 constructor 後,自動來個隱式轉換,將 dosomething(3); 轉成 do_something(B(3)); ,於是編譯就通過了。C++竟然允許這樣子的事默默發生,我該說是聰明還是骯髒呢?
看見這個特性之後,我才驚覺原來之前這樣子寫可以通過的原因就是ctor隱式轉換
```cpp
void foo( string kerker ) {
cout< int main() {
foo("KERKER");
}
``` 因為foo("KERKER"); 被偷偷轉換為 foo(string("KERKER"));
實際上是這樣子阿,難怪 char* 跟 string 好像無接縫連接了一樣,不過我還是不喜歡這個特性。