c 型別轉換運算子

2021-07-11 22:36:27 字數 1882 閱讀 4785

c++中有4個型別轉換運算子,使裝換過程更規範

dynamic_cast

< type-name> (expression)

如果轉型失敗則返回0,即空指標。

該運算子的用途是,使得能夠在類層次結構中進行向上轉換(由於 is-a關係,這樣的型別轉換時安全的),而不允許其他轉換。

二、const_cast

const_cast運算子用於執行只有一種用途的型別轉換,即改變值為const 或 volatile,其語法與dynamic_cast運算子相同。

const_cast

< type-name > (expression)

如果型別的其他方面也被修改,則上述型別轉換將出錯。也就是說,除了const或volatile特徵(有或無)可以不同外,type_name 和expression的型別必須相同

另外const_cast不是萬能的。它可以修改指向乙個值的指標,但修改const值的結果是不確定的。

using

std::cout;

using

std::endl;

void change(const

int *pt, int n);

int main()

void change(const

int *pt, int n)

執行結果:

pop1,pop2: 38383 , 2000

pop1, pop2: 38280 , 2000

請按任意鍵繼續. . .

可以看到呼叫change()時,修改了pop1,但沒有修改pop2。咋change()中,指正被宣告為const int * ,因此不能用來修改指向的 int 。指標pc刪除了 const特性,因此可用來修改指向的值,但僅當執行的值不少const時才行,因此,pc可用來修改pop1,單不能修改pop2.

三、static_cast

static_cast運算子的語法與其他型別轉換運算子相同

static_cast

< type-name > (expression)

僅當 type-name可被隱式轉換為expression所屬型別或expression可被隱式轉換為type-name所屬的型別時,上述轉換才是合法的,否則將出錯。

high bar;

low blow;

...high *pb = static_cast

( &blow) //合法

low *pl = static_cast

< low *> (&bar) //合法

pond *pmer = static_cast

< pond * > (& blow) ;//非法

四、reinterpret_cast

reinterpret_cast運算子用於天生危險的型別轉換。

用法:

reinterpret_cast

< type-name >(expression)

示例:

struct dat  ;

long value = 0xa224b118;

dat * pd = reinterpret_cast

(&value);

cout

然而,reinterpret_cast運算子並不支援所有的型別轉換。例如,可以將指標型別轉換為足以儲存指標表示的整形,但不能將指標轉換為更小的整型或浮點型。另乙個限制是,不能將函式指標轉換為資料指標,反之亦然。

C 型別轉換運算子

隱式轉換,是針對不同型別之間的賦值和運算,函式呼叫傳遞引數 這些的轉換都是由編譯器自動完成 char ch int i ch 顯式轉換 由程式設計師在變數前面新增型轉換 char pc char pb void ps void pa 通過上述的兩種方式,c語言大部分的型別轉換都可以順利進行,c 繼承...

C 型別轉換運算子

用於 指向派生類物件的 基類指標轉換成派生類指標。如果轉換失敗,則返回0,即空指標。通過判斷轉換是否成功,來決定是否用派生類裡的函式 基類中可能沒有那個函式 class a class b public a class c public b a a new a a b new b a c new c...

C 型別轉換運算子

目錄 dynamic cast static cast const cast reinterpret cast c語言的型別轉換比較自由,但也帶來了一些問題,這些問題大多由程式設計師自行控制和解決。對於龐大的c 語言機制而言,這種簡單粗暴的型別轉換方式顯然是個巨大的負擔,因此c 引入4種型別轉換運算...