在C++中,有四種強制類型轉換:
1、static_cast:這是最常見的類型轉換。它可以用于基本數據類型之間的轉換,也可以用于指向父類和子類之間的指針或引用的轉換。
static_cast可以實現下列轉換:
①基本數據類型之間的轉換。
②將任何類型轉換為void類型。
③把空指針轉換成目標類型的指針。
④用于類層次結構中基類和派生類之間指針或引用的轉換。
⑤向上轉換(派生類轉換為基類)是安全的;向下轉換(基類轉換為派生類)沒有動態(tài)類型檢查,是不安全的。
例如:
int i = 10;
double d = static_cast<double>(i); // 整型轉為浮點型
2、dynamic_cast:主要用于處理基類和派生類之間的轉換。如果類型轉換不安全,它會返回空指針NULL。這是唯一一種在運行時執(zhí)行類型檢查的轉換。
例如:
Base *b = new Derived();
Derived *d = dynamic_cast<Derived*>(b); // 基類指針轉為派生類指針
if (d != nullptr) {
// 轉換成功
} else {
// 轉換失敗
}
3、const_cast:這種類型轉換用于修改常量對象的常量屬性。需要注意的是,使用 const_cast 去掉常量性質并修改數據可能導致未定義的行為。
例如:
int num = 100;
const int* p1 = #
//將常量指針轉換為普通類型指針,去除const屬性
int* p2 = const_cast<int*>(p1);
*p2 = 200;
int a = 100;
const int& ra = a;
//將常量引用轉換為普通類型引用,去除const屬性
int& ra1 = const_cast<int&>(ra);
ra1 = 200;
注意:
const_cast<>只能用于轉換指針或引用。
4、reinterpret_cast:這種類型轉換允許進行任何指針或整型的轉換。它可以將任何類型的指針轉換為任何其他類型的指針,也可以將任何類型的指針轉換
例如:
char c = 'a';
int d = reinterpret_cast<int&>(c);
int* p=NULL;
float* q = NULL;
p = reinterpret_cast<int*>(q);
q = reinterpret_cast<float*>(q);
注意:文章來源:http://www.zghlxwxcb.cn/news/detail-632072.html
reinterpret_cast要轉換的類型必須是指針類型、引用或算術類型。文章來源地址http://www.zghlxwxcb.cn/news/detail-632072.html
到了這里,關于C++ 強制類型轉換的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!