日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

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

作者:tianyvHon ? 更新時(shí)間: 2022-07-28 編程語言

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);
}

原文鏈接:https://blog.csdn.net/weixin_44916154/article/details/124940241

欄目分類
最近更新