c的轉換屬於太多與靈活,如果c++的類與物件也這樣使用,將會很不安全。
char* pstring = "hello!"
int* p =(int *)pstring;
static_cast用於相關型別的指標之間的轉換,還可以顯式執行標準資料型別的型別轉換。其重要的作用是在編譯階段檢查型別轉換是否安全。
base *pbase = new base();
derived *pderived = new derived();
pbase = pderived; //ok,直接向上轉換沒有問題
pderived = pbase; //error,這就得強制轉換了,用下面的方法
pderived = static_cast(pbase); //ok,安全的強制轉換
unrelated *p = static_cast(pbase); //error,轉換到不相關的型別這就報錯了
下面 是vs報錯資訊
dynamic_cast動態型別轉換。在執行階段執行型別轉換。這就與動態型別識別有關了。在c++11中常見,具體
注意一定要檢查dynamic_cast的返回值的有效性,dynamic_cast的轉換很容易失敗,返回null轉換失敗。
這就是乙個強制轉換,類似於c語言習慣。回到那個程式
unrelated *p = static_cast(pbase); //error,轉換到不相關的型別這就報錯了
但是這樣就可以了
unrelated *p = reinterpret_cast(pbase); //ok,轉換到不相關的型別不報錯
官方建議我們不要一直用,因為不安全。
這個更是逆天的強制轉換,官方建議不到萬不得已,千萬不要用。這是個關閉const訪問修飾符的強制轉換。直接破壞const的常量性。
C 基礎學習1 C 布林型別
布林型別 bool 是c 新增的一種基本資料型別。在標準的c語言中並未定義bool型別,如果需要使用bool型別,程式設計師可以通過巨集定義來自定義乙個bool型別,定義語句如下 define bool int define false 0 define true 1也就是將int型定義為bool型...
溫故而知新 1 C 型別轉換
型別轉換 所謂型別轉換,就是把值從乙個型別轉換為另乙個型別,比如int string,datetime string。以下是 c 入門經典 中對型別轉換的定義。切忌不可按照自己的慣性思維誤導,本人在複習前一直都認為顯式是所有情況都可轉換,隱式是特定情況才可轉換,因為只顧使用而很少仔細學習閱讀基本知識...
筆記1 C語言概述
1.c語言起源 c語言是由unix的研製者丹尼斯 里奇和肯 湯普遜於1970年研製出的b語言的基礎上發展完善起來的。19世紀70年代初期,貝爾實驗室的丹尼斯 里奇第一次將b語言改為c語言。2.c語言特點 c語言是一種面向過程的語言,同時具有高階語言和組合語言的優點。由於具有良好的移植性,稍加修改或不...