先大體說一下(這段是自己胡說的):
static_cast -- 相當於隱式的型別轉換.
dynamic_cast -- 主要用於類層次間的上行轉換和下行轉換(很透徹, 很精典)
reinterpret_cast
-- 最不安全的轉換, 可用於對映兩個完全不同的運算元
比較官方的:
static_cast執行非多型的轉換,用於代替c中通常的轉換操作
: 為運算元的位模式提供較低層的重新解釋
dynamic_cast
dynamic_cast < type-id > (expression)
該運算子把expression轉換成type-id型別的物件, type-id必須是類的指標、類的引用或者void*,
如果type-id是類指標型別, 那麼expression也必須是乙個指標, 如果type-id是乙個引用, 那麼expression也必須是乙個引用.
dynamic_cast運算子可以在執行期決定真正的型別. 如果downcast是安全的(也就說, 如果基類指標或者引用確實指向乙個派生類物件)這個運算子會傳回適當轉型過的指標. 如果downcast不安全, 這個運算子會傳回空指標(也就是說, 基類指標或者引用沒有指向乙個派生類物件.
dynamic_cast主要用於類層次間的上行轉換和下行轉換, 還可以用於類之間的交叉轉換.
在類層次間進行上行轉換時, dynamic_cast和static_cast
的效果是一樣的.
在進行下行轉換時, dynamic_cast具有型別檢查的功能, 比static_cast更安全.
static_cast
static_cast < type-id > (expression)
該運算子把expression轉換為type-id型別, 但沒有執行時型別檢查來保證轉換的安全性. 它主要有如下幾種用法:
1. 用於類層次結構中基類派生類之間指標或引用的轉換
注: 進行上行轉換(把派生類的指標或引用轉換成基類表示)是安全的, 進行下行轉轉(把基類指標或引用轉換成派生類表示)時, 由於沒有動態型別檢查, 所以是不安全的.
2. 用於基本資料型別之間的轉換, 如把int轉換成char, 把int轉換成enum. 這種轉換的安全性也要開發人員來保證
3. 把空指標轉換成目標型別的空指標
4. 把任何型別的表示式轉換成void型別
注: static_cast不能轉換掉expression的const、volatile、或者__unaligned屬性.
reinterpret_cast
static_cast和reinterpret_cast的區別:
c++primer第五章裡寫了編譯器隱式執行任何型別轉換都可由static_cast顯示完成, 而reinterpret_cast通常為運算元的位模式提供較低層的重新解釋. 具體來說:
1. c++中的static_cast執行非多型的轉換, 用於代替c中通常的轉換操作. 因此, 被做為隱式型別轉換使用. 比如:
int i;
float f = 166.71;
i = static_cast(f);
此時結果,i的值為166。
2. c++中的reinterpret_cast主要是將資料從一種型別的轉換為另一種型別. 所謂「通常為運算元的位模式提供較低層的重新解釋」也就是說將資料以二進位制存在形式的重新解釋. 比如:
int i;
char *p = "this is a example.";
i = reinterpret_cast(p);
此時結果, i與p的值是完全相同的, reinterpret_cast的作用是說將指標p的值以二進位制(位模式)的方式被解釋為整型, 並賦給i.
C 中的 cast(顯式型別轉換)
c 引入了 const cast,reinterpret cast 之類的新的顯式型別轉換方式,不僅大多數 c 程式設計師覺得不是很習慣,就連某些有經驗的c 程式設計師都會在一些細節上犯錯。誠然,既然我們可以簡單的寫出 int i int p p is a pointer 這樣的顯式轉換,為什麼還要...
sql中的cast函式
一 語法 cast expression as data type 引數說明 expression 任何有效的sqserver表示式。as 用於分隔兩個引數,在as之前的是要處理的資料,在as之後是要轉換的資料型別。data type 目標系統所提供的資料型別,包括bigint和sql varian...
sqlserver中的CAST 函式
語法 cast expression as data type 引數說明 expression 任何有效的sqserver表示式。as 用於分隔兩個引數,在as之前的是要處理的資料,在as之後是要轉換的資料型別。data type 目標系統所提供的資料型別,包括bigint和sql variant,...