十四 C 的型別轉換(C )

2021-10-09 13:42:22 字數 1505 閱讀 8161

內容參考於《21天學通c++》(第八版)

不去糾結c++的原理和細節,從c的角度去學習c++,再通過c++專案去加深理解

由於不喜歡c風格型別轉換,所以多了一套方案

1. static_cast

編譯階段檢查並轉換

base* objbase =

new derived ();

derived* objder =

static_cast

>

(objbase)

;// ok!

// class unrelated is not related to base

unrelated* notrelated =

static_cast

>

(objbase)

;// error

// the cast is not permitted as types are unrelated

2. dynamic_cast

執行階段轉換,根據**執行而定,如果不合適,那麼objder就會是null,整個過程**正常執行

base* objbase =

newderived()

;// perform a downcast

derived* objder =

dynamic_cast

>

(objbase);if

(objder)

// check for success of the cast

objder-

>callderivedfunction (

);

3. reinterpret_cast

reinterpret_cast 是 c++中與 c 風格型別轉換最接近的型別轉換運算子。它讓程式設計師能夠將一種物件

型別轉換為另一種,不管它們是否相關。

4. const_cast

乙個編譯錯誤的例子

void displayalldata (

const someclass& object)

以 const 引用的方式傳遞 object 顯然是正確的。畢竟,顯示函式應該是唯讀的,不應呼叫非 const 成員函式, 即不應呼叫能夠修改物件狀態的函式。可是!!傳進來的物件是const型別,如果其方法displaymembers不是const型別,那麼這個就會造成衝突。不能呼叫乙個const物件的非const成員。可以從記憶體的角度去思考,const一開始就存在記憶體中,而成員不是const,最初是不存在記憶體的,所以const物件只初始化了const成員。

解決方法,const_cast 讓程式設計師能夠關閉物件的訪問修飾符 const。

void displayalldata (

const someclass& object)

mysql型別轉換c 型別轉換 C 型別轉換

一 簡介 型別轉換 把資料從一種型別轉換另一種型別 我們要求等號兩邊參與運算子必須型別一致,如果不一致,滿足下列條件會發生自動型別轉換或者隱式型別轉換。1.兩種型別相容 例如 int和double 相容 都是數字型別 2.目標型別大於源型別 double int 顯示型別轉換 1.兩種型別相相容 i...

C 的型別轉換

2008 03 15 12 59 強制型別轉換容易引發錯誤,所以被認為是一種醜陋的語法。c 中有乙個觀念 醜陋的語法就應該用醜陋的方式表達。所以,c 的轉換操作符使用 x cast 這種一種繁瑣的形式。目的是為了讓你在使用型別轉換前三思而行,看看是不是又不需要型別轉換的方法或設計。更重要的是,c風格...

C 型別的轉換

型別的轉換c 中型別轉換 顯隱 的機制分為兩種 一 隱式轉換 implicit conversions 二 顯式轉換 explict conversions 隱式轉換不需要指明欲轉變的型別 顯式轉換明確地使用轉換運算子 cast 指定要轉換成哪一種型別。c 允許程式設計師如果對於溢位進行處理 che...