我於昨晚去世,走時心如止水。
我於今早重生,來時心懷暖陽。
型別轉換(cast)是將一種資料型別轉換成另一種資料型別。例如,如果將乙個整型值賦給乙個浮點型別的變數,編譯器會暗地裡將其轉換成浮點型別。
轉換是非常有用的,但是它也會帶來一些問題,比如在轉換指標時,我們很可能將其轉換成乙個比它更大的型別,但這可能會破壞其他的資料。
應該小心型別轉換,因為轉換也就相當於對編譯器說:忘記型別檢查,把它看做其他的型別。
一般情況下,盡量少的去使用型別轉換,除非用來解決非常特殊的問題。
無論什麼原因,任何乙個程式如果使用很多態別轉換都值得懷疑.標準c++提供了乙個顯示的轉換的語法,來替代舊的c風格的型別轉換。
新型別的強制轉換可以提供更好的控制強制轉換過程,允許控制各種不同種類的強制轉換。c++風格的強制轉換其他的好處是,它們能更清晰的表明它們要幹什麼。程式設計師只要掃一眼這樣的**,就能立即知道乙個強制轉換的目的。
進行上行轉換(把派生類的指標或引用轉換成基類表示)是安全的;
進行下行轉換(把基類指標或引用轉換成派生類表示)時,由於沒有動態型別檢查,所以是不安全的。
用於基本資料型別之間的轉換,如把int轉換成char,把char轉換成int。這種轉換的安全性也要開發人員來保證。
#include
#include
using
namespace std;
class
animal
;class
dog:
public animal
;class
other
;void
test01()
//繼承關係指標互相轉換
void
test02()
//繼承關係引用相互轉換
void
test03()
//無繼承關係指標轉換
void
test04()
ynamic_cast主要用於類層次間的上行轉換和下行轉換;
在類層次間進行上行轉換時,dynamic_cast和static_cast的效果是一樣的;
在進行下行轉換時,dynamic_cast具有型別檢查的功能,比static_cast更安全
#include
#include
using
namespace std;
//dynamic_cast主要用於類層次間的上行轉換和下行轉換;
//在類層次間進行上行轉換時,dynamic_cast和static_cast的效果是一樣的;
//在進行下行轉換時,dynamic_cast具有型別檢查的功能,比static_cast更安全
class
animal
;class
dog:
public animal};
class
other};
//普通型別轉換
void
test01()
//繼承關係指標
void
test02()
//繼承關係引用
void
test03()
//無繼承關係指標轉換
void
test04()
該運算子用來修改型別的const屬性。。
注意:不能直接對非指標和非引用的變數使用const_cast操作符去直接移除它的const.
/*
該運算子用來修改型別的const屬性:const_cast
常量指標被轉化成非常量指標,並且仍然指向原來的物件;
常量引用被轉換成非常量引用,並且仍然指向原來的物件;
*/#include
#include
using
namespace std;
//注意:不能直接對非指標和非引用的變數使用const_cast操作符去直接移除它的const
//常量指標轉換成非常量指標
void
test01()
//常量引用轉換成非常量引用
void
test02()
這是最不安全的一種轉換機制,最有可能出問題。
主要用於將一種資料型別從一種型別轉換為另一種型別。它可以將乙個指標轉換成乙個整數,也可以將乙個整數轉換成乙個指標.
#include
#include
using
namespace std;
class
person
;class
other
;void
mian()
12 型別轉換指令
作用 用於將兩種不同的資料型別進行相互轉換。其實也就是用於基本資料型別 出去bool型別 之間的相互轉換。型別轉換指令分為寬化型別轉換和窄化型別轉換。從小範圍型別轉換到大範圍型別的安全轉換稱為寬化型別轉換。例如從int轉換成long。指令包括 如圖中所示,圖中每一條紅色的線,就對應著一條指令。例如從...
C 基礎(1) 型別轉換
1.裝箱與拆箱 c 的資料型別分為基本型別和引用型別兩種,將基本型別轉成引用型別的過程,稱之為 裝箱 將引用型別轉成基本型別的過程,稱之為 拆箱 裝箱 的過程,會在記憶體的堆中建立乙個基本型別的副本,請看以下 來自msdn class testboxing i system.console.writ...
C 基礎06 型別轉換
系統自動進行,無需開發人員介入。int main 2.1 c語言風格的強制型別轉換int main 2.1.2 c 的強制型別轉換 通用形式 強制型別轉換名 express type 轉換的目標型別 express 需要轉換的變數 2.1.2.1 static cast int main b 類中子...