C++四種類(lèi)型轉(zhuǎn)換全解
C++ 中的四種類(lèi)型轉(zhuǎn)換是 C++ 引入的更安全、更明確的類(lèi)型轉(zhuǎn)換操作符,相比 C 風(fēng)格的強(qiáng)制轉(zhuǎn)換更加精細(xì)和可控:
- static_cast? - 靜態(tài)類(lèi)型轉(zhuǎn)換
最常用的轉(zhuǎn)換,用于良性轉(zhuǎn)換
int i = 10;
double d = static_cast<double>(i); // 基本類(lèi)型轉(zhuǎn)換
class Base {};
class Derived : public Base {};
Base* b = new Derived();
Derived* d = static_cast<Derived*>(b); // 向下轉(zhuǎn)換(不安全,不檢查)
int* p = nullptr;
void* vp = static_cast<void*>(p); // void* 轉(zhuǎn)換- dynamic_cast? - 動(dòng)態(tài)類(lèi)型轉(zhuǎn)換
用于多態(tài)類(lèi)型的向下轉(zhuǎn)換,運(yùn)行時(shí)檢查類(lèi)型安全
class Base { virtual void foo() {} };
class Derived : public Base {};
Base* b = new Derived();
// 安全的向下轉(zhuǎn)換
Derived* d = dynamic_cast<Derived*>(b);
if (d != nullptr) { // 轉(zhuǎn)換成功
// 使用 d
}
// 轉(zhuǎn)換失敗返回 nullptr(對(duì)指針)或拋出異常(對(duì)引用)- const_cast? - 常量性轉(zhuǎn)換
添加或移除 const、volatile 屬性
const int ci = 10;
int* pi = const_cast<int*>(&ci); // 移除 const
*pi = 20; // 未定義行為,ci 原本是 const
void print(char* str) { /* 修改 str */ }
const char* s = "hello";
print(const_cast<char*>(s)); // 臨時(shí)移除 const- reinterpret_cast? - 重新解釋轉(zhuǎn)換
低級(jí)別的重新解釋?zhuān)钗kU(xiǎn)的轉(zhuǎn)換
int* p = new int(65); char* c = reinterpret_cast<char*>(p); // 重新解釋指針類(lèi)型 int i = 0x12345678; float f = reinterpret_cast<float&>(i); // 二進(jìn)制重新解釋 // 函數(shù)指針轉(zhuǎn)換 typedef void (*FuncPtr)(); FuncPtr func = reinterpret_cast<FuncPtr>(0x12345678);


到此這篇關(guān)于C++四種類(lèi)型轉(zhuǎn)換全解的文章就介紹到這了,更多相關(guān)C++四種類(lèi)型轉(zhuǎn)換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- C++ void 指針和指針類(lèi)型轉(zhuǎn)換方法
- C++特殊類(lèi)設(shè)計(jì)與類(lèi)型轉(zhuǎn)換詳細(xì)代碼示例
- C++中不同類(lèi)型默認(rèn)轉(zhuǎn)換的規(guī)則和機(jī)制詳解
- C++中五種類(lèi)型轉(zhuǎn)換的深度對(duì)比與實(shí)踐指南
- C++強(qiáng)制類(lèi)型轉(zhuǎn)換詳細(xì)示例代碼
- C++特殊類(lèi)設(shè)計(jì)及類(lèi)型轉(zhuǎn)換舉例詳解
- C++迭代器和顯示類(lèi)型轉(zhuǎn)換方式
- 一文帶你探索C++中類(lèi)型轉(zhuǎn)換的奧秘
- 詳解C++中的四種類(lèi)型轉(zhuǎn)換運(yùn)算符
- C++類(lèi)型轉(zhuǎn)換通用接口設(shè)計(jì)實(shí)現(xiàn)
相關(guān)文章
C語(yǔ)言實(shí)現(xiàn)關(guān)機(jī)小程序
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)關(guān)機(jī)小程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-02-02
C語(yǔ)言實(shí)現(xiàn)三子棋小游戲全程詳解
完成一個(gè)三子棋的代碼并不是很難,有困難且重要的是完成這個(gè)游戲代碼所具備的思想,因?yàn)樗枷肷系倪M(jìn)步才是真正的進(jìn)步,當(dāng)我們有了這個(gè)思想上的武器,寫(xiě)出別的代碼,難度就不會(huì)高2022-05-05
C語(yǔ)言字符串函數(shù)介紹與模擬實(shí)現(xiàn)詳解
字符串函數(shù)(String?processing?function)也叫字符串處理函數(shù),指的是編程語(yǔ)言中用來(lái)進(jìn)行字符串處理的函數(shù),如C,pascal,Visual以及LotusScript中進(jìn)行字符串拷貝,計(jì)算長(zhǎng)度,字符查找等的函數(shù)2022-02-02
C/C++中的mem函數(shù)和strcopy函數(shù)的區(qū)別和應(yīng)用
strcpy和memcpy都是標(biāo)準(zhǔn)C庫(kù)函數(shù),strcpy提供了字符串的復(fù)制而memcpy提供了一般內(nèi)存的復(fù)制。下面通過(guò)本文重點(diǎn)給大家介紹C/C++中的mem函數(shù)和strcopy函數(shù)的區(qū)別和應(yīng)用,非常不錯(cuò),感興趣的朋友一起看下吧2016-08-08
C++ 基數(shù)排序的實(shí)現(xiàn)實(shí)例代碼
這篇文章主要介紹了C++ 基數(shù)排序的實(shí)現(xiàn)實(shí)例代碼的相關(guān)資料,這里附有實(shí)例代碼,幫助大家學(xué)習(xí)理解,需要的朋友可以參考下2016-11-11
C語(yǔ)言詳解數(shù)據(jù)結(jié)構(gòu)與算法中枚舉和模擬及排序
枚舉和模擬其實(shí)是沒(méi)什么算法可言的,大多數(shù)都是按照題目意思去寫(xiě),這里提供快排和歸并的兩個(gè)模板,感興趣的朋友來(lái)看看吧2022-04-04
淺析C語(yǔ)言中對(duì)于char*和char[]的理解
char * s 只是一個(gè)保存字符串首地址的指針變量,char a[]是許多連續(xù)的內(nèi)存單元,單元中的元素是char型,char * 和 char a[]具有相同的效果,源于字符串的本質(zhì),這篇文章主要介紹了C語(yǔ)言中對(duì)于char*和char[]的理解,需要的朋友可以參考下2023-02-02

