一、隱式轉換
規則:a.混合型別的表示式中,其運算元被轉為相同的型別
b.用作條件的表示式被轉為bool型別
c.用一表示式初始化某個變數,或將一表示式賦值給某個變數,則該表示式被轉換為該變數的型別
二、顯示轉換(強制型別轉換)
1.為什麼要進行強制型別轉換?
a.需要覆蓋通常的標準轉換
b.可能存在多種轉換,需要選擇一種特定的轉換方式
2.轉換形式:
cast-name(expression);
cast-name根據情況的不同,又分為static_cast、dynamic_cast、const_cast 和 reinterpret_cast。
◆static_cast
・編譯器隱式執行的任何型別轉換都可以用static_cast顯示完成。
・需要將乙個較大的資料型別賦值給較小的型別時使用。
・可以將存放在void*中的指標值強制轉換為原來的指標型別。
double i = 3.14;void*p = &i;
double *pd = static_cast(p);
◆dynamic_cast
暫不做論述
◆const_cast
・去除原本的const屬性
constint* p = 0
;int* pi = const_cast(p);
◆reinterpret_cast
・為運算元的位模式提供較低層次的重新解釋
int *p = 0;char *pc = reinterpret_cast(p);
pc所指向的真實物件是int型,而非字元陣列,如果用pc去初始化string物件,則會錯誤:
string str(pc);
3.舊式強制轉換:
type (expr); //function-style cast notation
(type) expr; //
c-language-style cast notation
比如:
inti;double
j;int *p;
char* pc = (char*)p;
int i = int (j);
三、具體的轉換例子:
conststring*ps;
void *pv;
如果要實現:
pv = (void*)ps;
我們可以使用強制轉換:
pv = static_cast(const_cast(ps));
009 型別轉換
運算子兩邊的資料型別必須一致,且表示式的值 也是運算子兩邊的數的型別,不一致時,要先轉換,再運算。自動型別轉換 隱式型別轉換 將精度低的轉為精度高的資料,系統自動進行,不會造成資料精度丟失。前提 型別相容 double int double string 目標型別精度大於源型別 顯式型別轉換 強制轉...
21型別轉換
典型案例總結 靜態型別轉換,編譯的時c 編譯器會做型別檢查 基本型別能轉換 但是不能轉換指標型別,只要隱式型別轉換可以的地方都可以使用static cast。若不同型別之間,進行強制型別轉換,用reinterpret cast 進行重新解釋。一般性結論 總結 static cast 和reinter...
七型別轉換
c 提供六種型別轉換符號。前兩種是c風格,稱為c風格強制轉換,t 或者t 他們的效果一樣。後面四種分別是 負責將const型別轉換為非const型別,也可以反過來轉換。通常非const型別會自動轉換成const型別,所以一般不需要使用const cast進行轉換,但是如果有過載函式或者模板特化的話,...