C 強制型別轉換

2021-09-25 09:14:58 字數 1108 閱讀 9641

#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...