型別轉換運算子

2021-10-20 21:12:29 字數 1029 閱讀 5504

c++中4個型別轉換運算子:

可以根據目的選擇乙個適合的運算子,而不是使用通用的型別轉換。

用於將派生類指標轉換為基類指標,其主要用途是確保可以安全地呼叫虛函式。

假設high和low是兩個類,而ph和pl的型別分別為high* 和low*,則僅當low是high的可訪問基類(直接或間接)時,下面的語句才將乙個low*指標賦給pl:

否則,該語句將空指標賦給pl。

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

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

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

提供該運算子的原因是,有時候可能需要這樣乙個值,它在大多數時候是常量,而有時又是可以修改的。在這種情況下,可以將這個值宣告為const,並在需要修改它的時候,使用const_cast。

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

reinterpret_cast運算子用於天生危險的型別轉換。它不允許刪除const,但會執行其他令人生厭的操作。有時程式設計師必須做一些依賴於實現的、令人生厭的操作,使用reinterpret_cast運算子可以簡化對這種行為的跟蹤工作。

下面是乙個使用示例:

通常,這樣的轉換適用於依賴於實現的底層程式設計技術,是不可移植的。例如,不同系統在儲存多位元組整型時,可能以不同的順序儲存其中的位元組。

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

型別轉換運算子

在程式設計過程中,我們經常需要把一種型別轉換為另外一種型別。在轉換過程中,我們需要關心兩件事情 1。這種型別轉換是否合法?2。轉換得規則如何?c 預設自動支援幾種型別轉換 基礎型別之間的轉換 派生類指標向基類指標的轉換 非常量型別向常量型別的轉換等等。對於其他型別間的轉換,則沒 有規定。舉例來說,c...

型別轉換運算子

在程式設計過程中,我們經常需要把一種型別轉換為另外一種型別。在轉換過程中,我們需要關心兩件事情 1。這種型別轉換是否合法?2。轉換得規則如何?c 預設自動支援幾種型別轉換 基礎型別之間的轉換 派生類指標向基類指標的轉換 非常量型別向常量型別的轉換等等。對於其他型別間的轉換,則沒有規定。舉例來說,cs...

強制轉換運算子和型別強制轉換運算子

char b a cout int b endl 在 c 中,型別的名字 包括類的名字 本身也是一種運算子,即型別強制轉換運算子。型別強制轉換運算子是單目運算子,也可以被過載,但只能過載為成員函式,不能過載為全域性函式。經過適當過載後,型別名 物件這個對物件進行強制型別轉換的表示式就等價於物件.op...