C 基礎(12)型別轉換

2021-10-07 22:39:24 字數 2464 閱讀 5403

我於昨晚去世,走時心如止水。

我於今早重生,來時心懷暖陽。

型別轉換(cast)是將一種資料型別轉換成另一種資料型別。例如,如果將乙個整型值賦給乙個浮點型別的變數,編譯器會暗地裡將其轉換成浮點型別。

轉換是非常有用的,但是它也會帶來一些問題,比如在轉換指標時,我們很可能將其轉換成乙個比它更大的型別,但這可能會破壞其他的資料。

應該小心型別轉換,因為轉換也就相當於對編譯器說:忘記型別檢查,把它看做其他的型別。

一般情況下,盡量少的去使用型別轉換,除非用來解決非常特殊的問題。

無論什麼原因,任何乙個程式如果使用很多態別轉換都值得懷疑.

標準c++提供了乙個顯示的轉換的語法,來替代舊的c風格的型別轉換。

新型別的強制轉換可以提供更好的控制強制轉換過程,允許控制各種不同種類的強制轉換。c++風格的強制轉換其他的好處是,它們能更清晰的表明它們要幹什麼。程式設計師只要掃一眼這樣的**,就能立即知道乙個強制轉換的目的。

進行上行轉換(把派生類的指標或引用轉換成基類表示)是安全的;

進行下行轉換(把基類指標或引用轉換成派生類表示)時,由於沒有動態型別檢查,所以是不安全的。

用於基本資料型別之間的轉換,如把int轉換成char,把char轉換成int。這種轉換的安全性也要開發人員來保證。

#include

#include

using

namespace std;

class

animal

;class

dog:

public animal

;class

other

;void

test01()

//繼承關係指標互相轉換

void

test02()

//繼承關係引用相互轉換

void

test03()

//無繼承關係指標轉換

void

test04()

ynamic_cast主要用於類層次間的上行轉換和下行轉換;

在類層次間進行上行轉換時,dynamic_cast和static_cast的效果是一樣的;

在進行下行轉換時,dynamic_cast具有型別檢查的功能,比static_cast更安全

#include

#include

using

namespace std;

//dynamic_cast主要用於類層次間的上行轉換和下行轉換;

//在類層次間進行上行轉換時,dynamic_cast和static_cast的效果是一樣的;

//在進行下行轉換時,dynamic_cast具有型別檢查的功能,比static_cast更安全

class

animal

;class

dog:

public animal};

class

other};

//普通型別轉換

void

test01()

//繼承關係指標

void

test02()

//繼承關係引用

void

test03()

//無繼承關係指標轉換

void

test04()

該運算子用來修改型別的const屬性。。

注意:不能直接對非指標和非引用的變數使用const_cast操作符去直接移除它的const.

/*

該運算子用來修改型別的const屬性:const_cast

常量指標被轉化成非常量指標,並且仍然指向原來的物件;

常量引用被轉換成非常量引用,並且仍然指向原來的物件;

*/#include

#include

using

namespace std;

//注意:不能直接對非指標和非引用的變數使用const_cast操作符去直接移除它的const

//常量指標轉換成非常量指標

void

test01()

//常量引用轉換成非常量引用

void

test02()

這是最不安全的一種轉換機制,最有可能出問題。

主要用於將一種資料型別從一種型別轉換為另一種型別。它可以將乙個指標轉換成乙個整數,也可以將乙個整數轉換成乙個指標.

#include

#include

using

namespace std;

class

person

;class

other

;void

mian()

12 型別轉換指令

作用 用於將兩種不同的資料型別進行相互轉換。其實也就是用於基本資料型別 出去bool型別 之間的相互轉換。型別轉換指令分為寬化型別轉換和窄化型別轉換。從小範圍型別轉換到大範圍型別的安全轉換稱為寬化型別轉換。例如從int轉換成long。指令包括 如圖中所示,圖中每一條紅色的線,就對應著一條指令。例如從...

C 基礎(1) 型別轉換

1.裝箱與拆箱 c 的資料型別分為基本型別和引用型別兩種,將基本型別轉成引用型別的過程,稱之為 裝箱 將引用型別轉成基本型別的過程,稱之為 拆箱 裝箱 的過程,會在記憶體的堆中建立乙個基本型別的副本,請看以下 來自msdn class testboxing i system.console.writ...

C 基礎06 型別轉換

系統自動進行,無需開發人員介入。int main 2.1 c語言風格的強制型別轉換int main 2.1.2 c 的強制型別轉換 通用形式 強制型別轉換名 express type 轉換的目標型別 express 需要轉換的變數 2.1.2.1 static cast int main b 類中子...