2009年4月14日 星期二

C++的內隱型別轉換

這兩天複習C++,又碰到了很詭異的語法

後來發現C++的型別轉換真是萬能


class T{
T();
T(int);
T(T&);
}

我有一個class T而我執行

T t;
t=100;

竟然可以通過編譯,原來在此Compiler很聰明的,會讓
t=100;
變成
t=new T(100);
在此會呼叫Convert Construct(轉換建構子)
此時建構子扮演的型別轉換的角色,C++會自己去找有沒有實作相關的轉換建構子
如果沒有就會編譯不過

像是

class G;
class T{
T(G&)
}

void print(T&){}

main(){
print(new G());
}

他可以通過編譯,因為在這種情況下,參數傳遞用的是initization而非assign
他會自動去尋找有沒有相關的轉換建構子

沒有留言: