国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

深入淺出C++——C++的類型轉(zhuǎn)換

這篇具有很好參考價值的文章主要介紹了深入淺出C++——C++的類型轉(zhuǎn)換。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


C語言中的類型轉(zhuǎn)換

在C語言中,如果賦值運算符左右兩側(cè)類型不同,或者形參與實參類型不匹配,或者返回值類型與接收返回值類型不一致時,就需要發(fā)生類型轉(zhuǎn)化。

C語言中總共有兩種形式的類型轉(zhuǎn)換:

  • 隱式類型轉(zhuǎn)換:編譯器在編譯階段自動進行轉(zhuǎn)換,不能轉(zhuǎn)就編譯失敗。
  • 顯式類型轉(zhuǎn)換:需要用戶自己處理。
void Test ()
{
    int i = 1;
    double d = i; // 隱式類型轉(zhuǎn)換(意義相近的類型)
    
    int* p = &i;
    int address = (int) p;// 顯示的強制類型轉(zhuǎn)換(意義不相近的類型,但是值轉(zhuǎn)換后有意義)
}

C語言中的類型轉(zhuǎn)換缺陷:

  1. 轉(zhuǎn)換的可視性比較差,所有的轉(zhuǎn)換形式都是以一種相同形式書寫,難以跟蹤錯誤的轉(zhuǎn)換。
  2. 隱式類型轉(zhuǎn)化有些情況下可能會出問題:比如數(shù)據(jù)精度丟失。
  3. 顯式類型轉(zhuǎn)換將所有情況混合在一起,代碼不夠清晰。

C++強制類型轉(zhuǎn)換

為了彌補C語言類型轉(zhuǎn)換的缺陷,C++提出了自己的類型轉(zhuǎn)化風(fēng)格,并且C++中還可以使用C語言的轉(zhuǎn)化風(fēng)格。

static_cast

static_cast用于非多態(tài)類型的轉(zhuǎn)換(靜態(tài)轉(zhuǎn)換),編譯器隱式執(zhí)行的類型轉(zhuǎn)換(意義相近類型)都可用static_cast,但它不能用于兩個不相關(guān)的類型進行轉(zhuǎn)換。

int main()
{
    double d = 12.34;
    int a = static_cast<int>(d);
    cout << a << endl;				//12
    return 0;	
}

reinterpret_cast

reinterpret_cast操作符通常為操作數(shù)的位模式提供較低層次的重新解釋,用于將一種類型轉(zhuǎn)換為另一種不同的類型,即類型轉(zhuǎn)換為不相近的類型。

int main()
{
  double d = 12.34;
  int a = static_cast<int>(d); //12

  int* p = reinterpret_cast<int*>(a); 
  cout << p << endl;			//000000000000000C
  return 0;
}

const_cast

const_cast最常用的用途就是刪除變量的const屬性,方便賦值。

int main()
{
	volatile const int a = 2;
	int* p = const_cast<int*>(&a);
	*p = 3;              //修改
	cout << a << endl;   //3
	return 0;
}

編譯器以為a不會改,把a放到了寄存器中,打印的時候去寄存器中拿,加volatile可以去掉編譯器的優(yōu)化,拿到內(nèi)存中正確的值。


dynamic_cast

dynamic_cast用于將一個類對象的指針/引用轉(zhuǎn)換為類對象的指針或引用(動態(tài)轉(zhuǎn)換)。

  • 向上轉(zhuǎn)型:子類對象指針/引用->父類指針/引用(不需要轉(zhuǎn)換,賦值兼容規(guī)則)

  • 向下轉(zhuǎn)型:父類對象指針/引用->子類指針/引用(用dynamic_cast轉(zhuǎn)型是安全的)

  • dynamic_cast只能用于父類含有虛函數(shù)的類。

  • dynamic_cast會先檢查是否能轉(zhuǎn)換成功,能成功則轉(zhuǎn)換,不能則返回nullptr。

  • dynamic_cast會根據(jù)基類指針是否真正指向繼承類指針來做相應(yīng)處理, 即會作出一定的判斷。文章來源地址http://www.zghlxwxcb.cn/news/detail-464664.html

    //A*類型指針有可能指向父類,也有可能指向子類
    void fun(A* pa)
    {
    	//如果pa指向子類,那么可以轉(zhuǎn)換,表達式返回正確的地址
    	//如果pa指向父類,那么不可以轉(zhuǎn)換,表達式返回0
    	// dynamic_cast會先檢查是否能轉(zhuǎn)換成功,能成功則轉(zhuǎn)換,不能則返回nullptr
    	
    	B* pb = dynamic_cast<B*>(pa); //父類轉(zhuǎn)換為子類安全
    	//B* pb = (B*)pa;			  //父類轉(zhuǎn)換為子類不安全
    	if (pb)
    	{
    		cout << "轉(zhuǎn)換成功" << endl;
    		///
    	}
    	else
    	{
    		cout << "轉(zhuǎn)換失敗" << endl;
    	}	
    }
    
    int main()
    {
    	A a;
    	B b;
    	fun(&a);
    	fun(&b);
    	return 0;
    }
    

到了這里,關(guān)于深入淺出C++——C++的類型轉(zhuǎn)換的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 深入淺出分支語句—【C語言】

    深入淺出分支語句—【C語言】

    目錄 前言:為什么要學(xué)習(xí)分支和循環(huán)語句呢? 1. 語句的分類 2. 分支語句(選擇語句) 2.1 if-else語句 注意點:if-else語句后面不加{},默認只能跟一條語句 2.2? switch語句 ?注意點: 因為C語言是一門結(jié)構(gòu)化的程序設(shè)計語言,具有三種結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu),這三

    2024年02月02日
    瀏覽(161)
  • 深入淺出C語言—【函數(shù)】上

    深入淺出C語言—【函數(shù)】上

    ?? 目錄 1.函數(shù)的概念 2.C語言函數(shù)的分類 2.1 庫函數(shù) 2.1.1 strcpy庫函數(shù)舉例學(xué)習(xí)方式 2.1.2?庫函數(shù)擴展知識 2.2 自定義函數(shù) 2.2.1求兩個整數(shù)中的較大值 3. 函數(shù)的參數(shù) 3.1 實際參數(shù)(實參) 3.2 形式參數(shù)(形參) 4. 函數(shù)的調(diào)用 4.1 傳值調(diào)用 4.2 傳址調(diào)用 老鐵們,網(wǎng)址自取,記得一鍵

    2024年02月07日
    瀏覽(82)
  • 深入淺出C語言—【函數(shù)】下

    深入淺出C語言—【函數(shù)】下

    函數(shù)和函數(shù)之間可以根據(jù)實際的需求進行組合的,也就是互相調(diào)用的。 注意: 函數(shù)可以嵌套調(diào)用,但是不能嵌套定義。 把一個函數(shù)的返回值作為另外一個函數(shù)的參數(shù)。 上面的strlen函數(shù)是求數(shù)組長度的庫函數(shù), 特別注意的是,當數(shù)組為字符數(shù)組時,數(shù)組的末尾會自動放一個

    2024年02月17日
    瀏覽(114)
  • 深入淺出循環(huán)語句—【C語言】

    深入淺出循環(huán)語句—【C語言】

    ? 分支語句博客: http://t.csdn.cn/U2kZF 目錄 ?編輯 前言:我們先來了解一下break 、continue在循環(huán)中的作用 1. while循環(huán) ?while循環(huán)中的break ?while循環(huán)中的continue? 2. for循環(huán) for循環(huán)省略出錯舉例: ?for循環(huán)中的break ?for循環(huán)中的continue 3. do???while循環(huán) 利用do?while循環(huán)打印1~10? ?d

    2024年02月04日
    瀏覽(232)
  • 【C++深入淺出】類和對象下篇

    【C++深入淺出】類和對象下篇

    ? ? ? ? 老樣子,先來回顧一下上期的內(nèi)容:上期我們著重學(xué)了C++類中的六大 默認成員函數(shù) ,并自己動手實現(xiàn)了一個 日期類 ,相信各位對C++中的類已經(jīng)有了一定程度的了解。本期就是類和對象的最后一篇啦,終于要結(jié)束咯,吧唧吧唧 ? ? ? ? 話不多說,開吃咯?。?! 2.1

    2024年02月08日
    瀏覽(104)
  • 【C++深入淺出】初識C++中篇(引用、內(nèi)聯(lián)函數(shù))

    【C++深入淺出】初識C++中篇(引用、內(nèi)聯(lián)函數(shù))

    ? 目錄 一. 前言 二. 引用 2.1 引用的概念 2.2 引用的使用 2.3 引用的特性 2.4 常引用 2.5 引用的使用場景 2.6 傳值、傳引用效率比較 2.7 引用和指針的區(qū)別 ?三. 內(nèi)聯(lián)函數(shù) 3.1 內(nèi)聯(lián)函數(shù)的概念 3.2 內(nèi)聯(lián)函數(shù)的特性? ? ? ? ? 上期說道,C++是在C的基礎(chǔ)之上,容納進去了 面向?qū)ο缶幊?/p>

    2024年02月12日
    瀏覽(896)
  • 深入淺出:大語言模型的視覺解析

    深入淺出:大語言模型的視覺解析

    一系列工具與文章的匯編,直觀易懂地解讀復(fù)雜的 AI 概念 圖片由作者利用 unDraw.co 的免費插圖制作 在當今世界,大語言模型(LLM)成為了熱門話題。幾乎每天都有新的語言模型問世,讓人們在 AI 領(lǐng)域懷有一種“不容錯過”的緊迫感。盡管如此,許多人仍對大語言模型的基礎(chǔ)

    2024年01月19日
    瀏覽(25)
  • 【C++】模板初階 【 深入淺出理解 模板 】

    【C++】模板初階 【 深入淺出理解 模板 】

    如何實現(xiàn)一個通用的交換函數(shù)呢? 使用函數(shù)重載雖然可以實現(xiàn) ,但是有一下幾個不好的地方: 重載的函數(shù) 僅僅是類型不同 ,代碼復(fù)用率比較低, 只要有新類型出現(xiàn)時,就需要用戶自己增加對應(yīng)的函數(shù) 代碼的可維護性比較低,一個出錯可能所有的重載均出錯 那能否 告訴編

    2024年02月05日
    瀏覽(84)
  • 【C++深入淺出】日期類的實現(xiàn)

    【C++深入淺出】日期類的實現(xiàn)

    目錄 一. 前言? 二. 日期類的框架 三. 日期類的實現(xiàn) 3.1 構(gòu)造函數(shù) 3.2 析構(gòu)函數(shù) 3.3 賦值運算符重載 3.4 關(guān)系運算符重載 3.5 日期 +/-?天數(shù) 3.6 自增與自減運算符重載 3.7 日期 - 日期 四. 完整代碼? ? ? ? ? 通過前面兩期類和對象的學(xué)習(xí),我們已經(jīng)對C++的類有了一定的了解。本期我

    2024年02月07日
    瀏覽(91)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包