【型別轉換】
c++有11種整型和3種浮點型別,當對不同的型別進行計算時,c++會自動執行型別的轉換。
【自動型別轉換】
執**況:
· 將一種算數型別賦給另一種算數型別時
· 表示式中包含不同的型別時
· 將引數傳遞給函式時
· 強制型別轉換
1、賦值時進行的轉換
· 值將被轉換成接受變數的型別。
此時將乙個值賦給範圍更大的型別通常不會出現什麼問題,但是反過來就應該考慮截斷(丟掉小數)和精度損失的問題。
· 將0賦給bool型別被轉換為false,非零轉換為true
2、表示式中的轉換
規則如下:
· long double > double > float > long int >= int > short >= wchar_t > char > bool(小的向大的轉)
· signed 向 unsigned轉換
3、傳遞引數時的轉換
· 傳遞引數時的型別轉換通常由c++函式原型控制。
· 另外為保持與傳統的c語言向相容,在將引數傳遞給取消原型對引數控制的函式時,將float引數提公升為double.
4、強制型別轉換
· c語言形式(typename) val;
· c++形式typename (val);
新的格式的想法是,讓強制型別轉換就像是函式的呼叫。
· stroustrup認為c語言的強制型別轉換太過粗暴因此 c++還引用了4中強制型別轉換操作符:
1)、dynamic_cast
· dynamic_cast只能將指向派生類物件的基類指標或引用轉換為派生類的指標或引用,
若用於其他轉換則指標為空,引用則丟擲異常。
此為向下型別轉換。
· dynamic_cast轉換符只能用於指標或者引用。dynamic_cast轉換符只能用於含有虛函式的類。
dynamic_cast轉換操作符在執行型別轉換時首先將檢查能否成功轉換,如果能成功轉換則轉換之,
如果轉換失敗,如果是指標則反回乙個0值,如果是轉換的是引用,則丟擲乙個bad_cast異常,
所以在使用dynamic_cast轉換之間應使用if語句對其轉換成功與否進行測試,
比如pd=dynamic_cast(pb); if(pd)else,或者try{};catch(bad_cast){}
2)、static_cast
· 完成向上型別轉換,即將指向派生類的指標或引用轉換為指向同一層次中的乙個基類的指標或引用。
·static_cast(val)
3)、reinterdivt_cast
· reinterpret_cast操作符代替了大多數其它c風格型別轉換的使用。
reinterpret_cast將指標轉換為其它指標型別、將數字轉換為指標或將指標轉換為數字。
4)、const_cast
· 剛才所討論的3種型別轉換操作都沒有涉及「常量屬性」,即不能使用它們移去物件的常量屬性。
為此,我們要使用const_cast操作符。
除了const和volatile關鍵字之外,它的型別引數必須和物件引數的型別相匹配。
C 入門6 15 型別轉換
型別轉換有三種方式 1.int 2.convert.toint32 3.int.parse 區別 1.處理空值null 2.處理數值時 int 強制轉換不進行四捨五入 3.convert.toint32的引數比較多,int.parse只能轉換string型別的。4.parse就是把string轉換成...
c 入門003 型別轉換
自動轉換型別不是改變原本的變數,而是建立乙個臨時的變數。c 允許將 a型別的變數 賦值給 b型別的變數,這樣值將轉換為a型別。long long num short short num long num short num 這樣將short 16位 擴充套件為 long 32位 潛在問題 轉換 潛在...
C 入門經典學習5 型別轉換
c 入門經典學習5 型別轉換 隱式轉換 任何型別a,只要其取值範圍完全包含在型別b的取值範圍內,就可以隱式轉換為型別b。顯示轉換 checked unchecked convert 列舉 enum 預設是int 可以指定,可以用 賦值,值可以重複。string轉換為列舉用enum.parse 結構 ...