009 型別轉換

2022-04-26 04:51:18 字數 1405 閱讀 4874

一、隱式轉換

規則: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屬性

const

int* 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

比如:

int

i;double

j;int *p;

char* pc = (char*)p;

int i = int (j);

三、具體的轉換例子:

const

string*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進行轉換,但是如果有過載函式或者模板特化的話,...