#includeusing namespace std;
//static_cast、reinterpret_cast、const_cast、dynamic_cast
#if 0
//static_cast
//static_cast用於非多型型別的轉換(靜態轉換),編譯器隱式執行的任何型別轉換
//都可用static_cast,但它不能用於兩個不相關的型別進行轉換
int main()
#endif
#if 0
//const_cast
//const_cast最常用的用途就是刪除變數的const屬性,方便賦值
void test()
#endif
#if 0
//dynamic_cast
//dynamic_cast用於將乙個父類物件的指標轉換位子類物件的指標或引用(動態轉換)
//向上轉型:子類物件指標->父類指標/引用(不需要轉換,賦值相容規則)(切片)
//向下轉型:父類物件指標->子類指標/引用(用dynamic_cast轉型是安全的)
//注意:
//1. dynamic_cast只能用於含有虛函式的類
//2. dynamic_cast會先檢查是否能轉換成功,能成功則轉換,不能則返回0
class a
};class b :public a
{};void fun(a* pa)
int main()
#endif
//注意 強制型別轉換關閉或掛起了正常的型別檢查,每次使用強制型別轉換前,
//程式設計師應該仔細考慮是否還有其他不同的方法達到同一目的,如果非強制型別轉換不可,
//則應限制強制轉換值的作用域,以減少發生錯誤的機會。
//強烈建議:避免使用強制型別轉換
#if 0
//explicit
//explicit 關鍵字阻止經過轉換建構函式進行隱式轉換的發生
class a
a(const a& a)
private:
int _a;
};int main()
#endif
C 強制型別轉換
四種型別可能很多人都常常忽略就象我一樣,但是有時還是比較有用的。不了解的建議看看,一些機制我也不是十分了解,只是將一些用法寫出來讓大家看看。強制轉化無論從語法還是語意上看,都是c 中最難看的特徵之一。但是基於c風格的轉化的語義的不明確性及其一些潛在問題。強制型別轉化最終還是被c 接受了。1.stat...
C 強制型別轉換
標準c 中主要有四種強制轉換型別運算子 const cast,reinterpret cast,static cast,dynamic cast等等。1 static cast a 將位址a轉換成型別t,t和a必須是指標 引用 算術型別或列舉型別。表示式static cast a a的值轉換為模板中...
C 強制型別轉換
關於強制型別轉換的問題,很多書都討論過,寫的最詳細的是c 之父的 c 的設計和演化 最好的解決方法就是不要使用c風格的強制型別轉換,而是使用標準c 的型別轉換符 static cast,dynamic cast。標準c 中有四個型別轉換符 static cast,dynamic cast,reint...