C 4種強制型別轉換

2022-08-24 11:00:18 字數 3051 閱讀 7331

c++的四種強制型別轉換為:static_cast、const_cast、reinterpret_cast和dynamic_cast

型別轉換的一般形式:cast-name(expression);

任何具有明確定義的型別轉換,只要不包含底層const,都可以使用static_cast;

double slope = static_cast(j) / i;

注:

頂層const:表示指標本身是個常量。如:int *const p;

底層const:表示指標所指的物件是乙個常量。如:int const *p;

該運算子只能改變運算物件的底層const。

#include

using

namespace

std;

int main()

注:此處只能用const_cast,而不能用static_cast;

通常為運算物件的位模式提供較低層次上的重新解釋。

注: 1、在指標之間轉換,將乙個型別的指標轉換為另乙個型別的指標,無關型別;

2、將指標值轉換為乙個整型數,但不能用於非指標型別的轉換。

只用於物件的指標和引用,不能用於內建的基本資料型別的強制轉換。

使用dynamic_cast進行轉換的,基類中一定要有虛函式,否則編譯不通過。

執行時型別識別,用於將基類的指標或引用安全地轉換成派生類的指標或引用。

對指標進行dynamic_cast,失敗返回null,成功返回正常cast後的物件指標;

對引用進行dynamic_cast,失敗丟擲乙個異常bad_cast,成功返回正常cast後的物件引用。

對於「向上轉換」(即派生類指標或引用型別轉換為其基類型別),無論是指標還是引用向上轉換都是安全地。

對於「向下轉型」有兩種情況:

1、基類指標所指物件是派生類型別的,這種轉換是安全的;

2、基類指標所指物件為基類型別,在這種情況下dynamic_cast在執行時做檢查,轉換失敗,返回結果為0;

在引用上,dynamic_cast依舊是常用於「安全的向下轉型」。與指標一樣,引用的向下轉型也可以分為兩種情況,與指標不同的是,並不存在空引用,所以引用的dynamic_cast檢測失敗時會丟擲乙個bad_cast異常。

#include 

#include

using

namespace

std;

class a

};class b: public a

};int main()

基本型別轉換用static_cast。

去const屬性用const_cast。

不同型別的指標型別轉換用reinterpreter_cast。

多型類之間的型別轉換用daynamic_cast。

c++的四種強制型別轉換為:static_cast、const_cast、reinterpret_cast和dynamic_cast

型別轉換的一般形式:cast-name(expression);

任何具有明確定義的型別轉換,只要不包含底層const,都可以使用static_cast;

double slope = static_cast(j) / i;

注:

頂層const:表示指標本身是個常量。如:int *const p;

底層const:表示指標所指的物件是乙個常量。如:int const *p;

該運算子只能改變運算物件的底層const。

#include

using

namespace

std;

int main()

注:此處只能用const_cast,而不能用static_cast;

通常為運算物件的位模式提供較低層次上的重新解釋。

注: 1、在指標之間轉換,將乙個型別的指標轉換為另乙個型別的指標,無關型別;

2、將指標值轉換為乙個整型數,但不能用於非指標型別的轉換。

只用於物件的指標和引用,不能用於內建的基本資料型別的強制轉換。

使用dynamic_cast進行轉換的,基類中一定要有虛函式,否則編譯不通過。

執行時型別識別,用於將基類的指標或引用安全地轉換成派生類的指標或引用。

對指標進行dynamic_cast,失敗返回null,成功返回正常cast後的物件指標;

對引用進行dynamic_cast,失敗丟擲乙個異常bad_cast,成功返回正常cast後的物件引用。

對於「向上轉換」(即派生類指標或引用型別轉換為其基類型別),無論是指標還是引用向上轉換都是安全地。

對於「向下轉型」有兩種情況:

1、基類指標所指物件是派生類型別的,這種轉換是安全的;

2、基類指標所指物件為基類型別,在這種情況下dynamic_cast在執行時做檢查,轉換失敗,返回結果為0;

在引用上,dynamic_cast依舊是常用於「安全的向下轉型」。與指標一樣,引用的向下轉型也可以分為兩種情況,與指標不同的是,並不存在空引用,所以引用的dynamic_cast檢測失敗時會丟擲乙個bad_cast異常。

#include 

#include

using

namespace

std;

class a

};class b: public a

};int main()

基本型別轉換用static_cast。

去const屬性用const_cast。

不同型別的指標型別轉換用reinterpreter_cast。

多型類之間的型別轉換用daynamic_cast。

C 4種cast強制型別轉換

注意 盡量少使用轉型操作,尤其是dynamic cast,耗時較高,會導致效能的下降,盡量使用其他方法替代。const cast 定義 const cast轉換符是用來移除變數的const或volatile限定符 const int constant 21 const int const p con...

C 4種型別轉換

c 型別轉換 const cast,去const屬性。static cast,靜態型別轉換。如int轉換成char。dynamic cast,動態型別轉換。如子類和父類之間的多型型別轉換。reinterpret cast,僅僅重新解釋型別,但沒有進行二進位制的轉換。const cast const ...

C 4種型別轉換

總 結 去const屬性用const cast。基本型別轉換用static cast。多型類之間的型別轉換用daynamic cast。不同型別的指標型別轉換用reinterpreter cast。任何具有明確定義的型別轉換,只要不包含底層const,都可以使用static cast 注 頂層con...