欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++超詳細(xì)講解強(qiáng)制類型轉(zhuǎn)換

 更新時(shí)間:2022年05月31日 09:15:43   作者:tianyvHon  
在C++語言中新增了四個(gè)關(guān)鍵字static_cast、const_cast、reinterpret_cast和dynamic_cast。這四個(gè)關(guān)鍵字都是用于強(qiáng)制類型轉(zhuǎn)換的

1 C 強(qiáng)制類型轉(zhuǎn)換

C 方式的強(qiáng)制類型轉(zhuǎn)換的用法如下代碼所示:

(Type)(Expression)

  • Type:需要轉(zhuǎn)換成的類型
  • Expression:對其進(jìn)行轉(zhuǎn)換

e.g.

int v = 0x12345;
// 將 int 類型的變量轉(zhuǎn)換成 char 類型
char c = char(v);

C 方式的強(qiáng)制類型轉(zhuǎn)換存在如下問題:

過于粗暴:任意類型之間都可以進(jìn)行轉(zhuǎn)換,編譯器很難判斷其正確性

typedef void(PF)(int);
int v = 0x12345;
// 將 0x12345 轉(zhuǎn)換成一個(gè)函數(shù)指針的入口地址
PF* pf = (PF*)v;

上述代碼編譯器是可以編譯通過的,但實(shí)際上是不可行的,因此編譯器無法判斷其正確性

  • 潛在的問題不易被發(fā)現(xiàn)
  • 難于定位:無法快速定位出現(xiàn)錯(cuò)誤的強(qiáng)制類型轉(zhuǎn)換語句

2 C++ 強(qiáng)制類型轉(zhuǎn)轉(zhuǎn)

C++ 方式的強(qiáng)制類型轉(zhuǎn)換以 C++ 關(guān)鍵字的方式進(jìn)行轉(zhuǎn)換,同時(shí)將所有轉(zhuǎn)換類型分為4中類型,如下表所示:

類型特點(diǎn)
static_cast用于基本類型之間的轉(zhuǎn)換
不能同于基本類型指針間的轉(zhuǎn)換
可以用于有繼承關(guān)系的類對象之間的轉(zhuǎn)換和類指針之間的轉(zhuǎn)換
const_cast用于去除變量的只讀屬性
強(qiáng)制類型轉(zhuǎn)換的目標(biāo)類型必須是指針或引用
dynamic_cast用于有繼承關(guān)系的類指針間的轉(zhuǎn)換
用于有交叉關(guān)系的類指針間的轉(zhuǎn)換
具有類型檢查的功能
需要有虛函數(shù)的支持
reinterpret_cast用于指針類型之間的轉(zhuǎn)換
用于整數(shù)和指針類型之間的轉(zhuǎn)換

C++ 方式的強(qiáng)制類型轉(zhuǎn)換具有如下特點(diǎn):

  1. 編譯器能夠幫助檢查潛在的問題
  2. 可以快速的在代碼中進(jìn)行定位
  3. 支持動態(tài)類型識別

e.g. static_cast

void static_cast_Demo()
{
    int i = 0x12345;
    char c = 'c';
    int* pi = &i;
    char* pc = &c;
    c = static_cast<char>(i);		// ok,可以用于基本類型之間的轉(zhuǎn)換
    pc = static_cast<char*>(pi);	// error,不能同于基本類型指針間的轉(zhuǎn)換
}

e.g. const_cast

void const_cast_Demo()
{
    const int& i = 1;
    int& j = const_cast<int&>(i);	// ok
    const int x = 2;
    int& y = const_cast<int&>(x);	// ok
    int z = const_cast<int>(x);		// error,強(qiáng)制類型轉(zhuǎn)換的目標(biāo)類型必須是指針或引用
    j = 5;
    printf("j = %d\n", j);
    printf("i = %d\n", i);
    y = 8;
    printf("x = %d\n", x);
    printf("y = %d\n", y);
}

到此這篇關(guān)于C++超詳細(xì)講解強(qiáng)制類型轉(zhuǎn)換的文章就介紹到這了,更多相關(guān)C++強(qiáng)制類型轉(zhuǎn)換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談c和c++的某些小區(qū)別

    淺談c和c++的某些小區(qū)別

    下面小編就為大家?guī)硪黄獪\談c和c++的某些小區(qū)別。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-06-06
  • C++ Cartographer加載配置文件過程介紹

    C++ Cartographer加載配置文件過程介紹

    這篇文章主要介紹了Cartographer加載配置文件過程,谷歌優(yōu)秀的激光SLAM開源框架Cartographer算法簡單,但是程序部分太多需要學(xué)習(xí)的地方了,不論是整體框架的結(jié)構(gòu),還是數(shù)據(jù)的使用,都是非常優(yōu)美的
    2023-03-03
  • C++?Qt開發(fā)之運(yùn)用QJSON模塊解析數(shù)據(jù)

    C++?Qt開發(fā)之運(yùn)用QJSON模塊解析數(shù)據(jù)

    JSON(JavaScript?Object?Notation)是一種輕量級的數(shù)據(jù)交換格式,它易于人閱讀和編寫,也易于機(jī)器解析和生成,本文主要介紹了Qt如何運(yùn)用QJson組件的實(shí)現(xiàn)對JSON文本的靈活解析功能,需要的可以參考下
    2024-01-01
  • C++ 模版雙向鏈表的實(shí)現(xiàn)詳解

    C++ 模版雙向鏈表的實(shí)現(xiàn)詳解

    本篇文章是對C++中的模版雙向鏈表進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 如何在C++中建立一個(gè)順序表

    如何在C++中建立一個(gè)順序表

    在使用順序表之前,首先創(chuàng)建一個(gè)空的順序表,也就是初始化順序表。這里,在程序中只需設(shè)置順序表的結(jié)點(diǎn)數(shù)量ListLen為0即可。這樣,后面需要添加的數(shù)據(jù)元素將從順序表的第一個(gè)位置存儲
    2013-10-10
  • Qt QCustomPlot庫簡介(最新推薦)

    Qt QCustomPlot庫簡介(最新推薦)

    QCustomPlot是一款基于Qt的高性能C++繪圖庫,專為二維數(shù)據(jù)可視化設(shè)計(jì),它具有輕量級、實(shí)時(shí)處理百萬級數(shù)據(jù)和多圖層支持等特點(diǎn),適用于科學(xué)計(jì)算、工業(yè)監(jiān)控等場景,本文給大家介紹Qt QCustomPlot庫簡介,感興趣的朋友一起看看吧
    2025-07-07
  • 如何在Qt中實(shí)現(xiàn)關(guān)于Json?的操作

    如何在Qt中實(shí)現(xiàn)關(guān)于Json?的操作

    JSON是一種輕量級數(shù)據(jù)交換格式,常用于客戶端和服務(wù)端的數(shù)據(jù)交互,不依賴于編程語言,在很多編程語言中都可以使用JSON,這篇文章主要介紹了在Qt中實(shí)現(xiàn)關(guān)于Json的操作,需要的朋友可以參考下
    2023-08-08
  • C語言實(shí)現(xiàn)文本文件/二進(jìn)制文件格式互換

    C語言實(shí)現(xiàn)文本文件/二進(jìn)制文件格式互換

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)文本文件和二進(jìn)制文件格式互換,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • C++樹之遍歷二叉樹實(shí)例詳解

    C++樹之遍歷二叉樹實(shí)例詳解

    這篇文章主要給大家介紹了關(guān)于C++樹之遍歷二叉樹的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • C++淺析數(shù)據(jù)在內(nèi)存中如何存儲

    C++淺析數(shù)據(jù)在內(nèi)存中如何存儲

    使用編程語言進(jìn)行編程時(shí),需要用到各種變量來存儲各種信息。變量保留的是它所存儲的值的內(nèi)存位置。這意味著,當(dāng)您創(chuàng)建一個(gè)變量時(shí),就會在內(nèi)存中保留一些空間。您可能需要存儲各種數(shù)據(jù)類型的信息,操作系統(tǒng)會根據(jù)變量的數(shù)據(jù)類型,來分配內(nèi)存和決定在保留內(nèi)存中存儲什么
    2022-08-08

最新評論