最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一篇文章帶你了解C++中的顯示轉(zhuǎn)換

 更新時間:2021年08月24日 16:30:02   作者:休息一下接著來  
這篇文章主要介紹了C++11顯示類型轉(zhuǎn)換的優(yōu)點,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下,希望能給你帶來幫助

命名的強制類型轉(zhuǎn)換:
形式:

cast-name<type>(expression);

type是強制轉(zhuǎn)換的類型,expression是強制轉(zhuǎn)換的值。如果type是引用類型,則結(jié)果是左值。case-name是C++四種轉(zhuǎn)換類型static_cast、dynamic_cast、const_cast和reinterpret_cast的一種。

static_cast

可以被用于強制隱形轉(zhuǎn)換(例如,non-const對象轉(zhuǎn)換為const對象,int轉(zhuǎn)型為double,等等)作用于對象,它還可以用于很多這樣的轉(zhuǎn)換的反向轉(zhuǎn)換 (例如,void*指針轉(zhuǎn)型為有類型指針,基類指針轉(zhuǎn)型為派生類指針),但是它不能將一個const對象轉(zhuǎn)型為non-const對象(只有 const_cast能做到),它最接近于C-style的轉(zhuǎn)換。應(yīng)用到類的指針上,意思是說它允許子類類型的指針轉(zhuǎn)換為父類類型的指針(這是一個有效的隱式轉(zhuǎn)換),同時,也能夠執(zhí)行相反動作:轉(zhuǎn)換父類為它的子類。

int i;
float j = 10.2;
i = const_cast<int>(j);			// 將j轉(zhuǎn)換int型賦值給i,損失了一定的精度

const_cast

一般用于強制消除對象的常量性。它是唯一能做到這一點的C++風(fēng)格的強制轉(zhuǎn)型。這個轉(zhuǎn)換能剝離一個對象的const屬性,也就是說允許你對常量進(jìn)行修改。不能使用const_cast改變表達(dá)式的類型, const_cast的類型只能是指針,引用或指向?qū)ο箢惓蓡T的指針

const int constant = 21;
int* modifier = const_cast<int*>(&constant);	// 舊版的寫法 int* modifier = (int*)(&constant)
*modifier = 7;

std::cout << modifier << std::endl;		// 測試輸出的地址為0x61feec
std::cout << &constant << std::endl;	// 測試輸出的地址為0x61feec
 
std::cout << *modifier << std::endl;	// 輸出的值為 7
std::cout << constant << std::endl;		// 輸出的值為 21
// 上面可以看出,兩個指針指向同一塊地址,但是解引用的結(jié)果確不相同。
// const的值,是不能真的被改變。但是可以對可以對modifier進(jìn)行重新賦值

const_cast常用的情況:

/*
我們可能調(diào)用了一個參數(shù)不是const的函數(shù),而我們要傳進(jìn)去的實際參數(shù)確實const的,但是我們知道這個函數(shù)是不會對參數(shù)做修改的。于是我們就需要使用const_cast去除const限定,以便函數(shù)能夠接受這個實際參數(shù)
*/
#include <iostream>
using namespace std;

void Printer (int* val,string seperator = "\n")
{
	cout << val << seperator;
}

int main(void) 
{	
	const int consatant = 20;
	//Printer(consatant);        //Error: invalid conversion from 'int' to 'int*'
	Printer(const_cast<int *>(&consatant));
	return 0;
}

reinterpret_cast

**作用于底層二進(jìn)制。**是特意用于底層的強制轉(zhuǎn)型,導(dǎo)致實現(xiàn)依賴(就是說,不可移植)的結(jié)果,例如,將一個指針轉(zhuǎn)型為一個整數(shù)。這樣的強制類型在底層代碼以外應(yīng)該極為罕見。操作結(jié)果只是簡單的從一個指針到別的指針的值得二進(jìn)制拷貝。在類型之間指向的內(nèi)容不做任何類型的檢查和轉(zhuǎn)換。將一個指針轉(zhuǎn)換成其他類型的指針。reinterpret_cast被作為二進(jìn)制轉(zhuǎn)換重新解釋(沒有數(shù)位損失)。

int j;
int *p = new(int);
// j = p;	  // error: invalid conversion from 'int*' to 'int' [-fpermissive]
j = reinterpret_cast<int>(p);  //將指針類型,轉(zhuǎn)換成int型
std::cout << j << std::endl;   // 輸出int型的結(jié)果

dynamic_cast

主要用于執(zhí)行“安全的向下轉(zhuǎn)型(safe downcasting)”,也就是說,要確定一個對象是否是一個繼承體系中的一個特定類型。支持父類指針到子類指針的轉(zhuǎn)換,這種轉(zhuǎn)換時最安全的轉(zhuǎn)換。它 是唯一不能用舊風(fēng)格語法執(zhí)行的強制類型轉(zhuǎn)換,也是唯一可能有重大運行時代價的強制轉(zhuǎn)換。

【擴展】 舊版的強制類型轉(zhuǎn)換

在早期的C++語言中,顯示地進(jìn)行強制類型轉(zhuǎn)換包含兩種形式:

type (expr);		// 函數(shù)形式的強制類型轉(zhuǎn)換
(type) expr;		// 變量類型的強制類型轉(zhuǎn)換

根據(jù)涉及的類型不同,舊式的強制類型轉(zhuǎn)換分別與static_cast、const_cast或reinterpret_cast有相似的行為。當(dāng)我們在某處執(zhí)行舊式的強制類型轉(zhuǎn)換時,如果能換成static_cast、const_cast也合法,則其行為與對應(yīng)的命名轉(zhuǎn)換一致。如果替換不合法,則舊式指針強制轉(zhuǎn)換類型與reinterpret_cast類似的功能。

如:

char *pc = (char*)ip;	// ip是指向整數(shù)的指針
char *pc = reinterpret_cast<char*>(ip)	// 等價與上面的式子

總結(jié)

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • 關(guān)于C++中二分法詳解

    關(guān)于C++中二分法詳解

    大家好,本篇文章主要講的是關(guān)于C++中二分法詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • C++?超詳細(xì)示例講解list的使用

    C++?超詳細(xì)示例講解list的使用

    list是一種序列式容器。list容器完成的功能實際上和數(shù)據(jù)結(jié)構(gòu)中的雙向鏈表是極其相似的,list中的數(shù)據(jù)元素是通過鏈表指針串連成邏輯意義上的線性表,也就是list也具有鏈表的主要優(yōu)點,即:在鏈表的任一位置進(jìn)行元素的插入、刪除操作都是快速的
    2022-07-07
  • Qt編寫秒表功能

    Qt編寫秒表功能

    這篇文章主要為大家詳細(xì)介紹了Qt編寫秒表功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++友元函數(shù)與拷貝構(gòu)造函數(shù)詳解

    C++友元函數(shù)與拷貝構(gòu)造函數(shù)詳解

    這篇文章主要介紹了C++友元函數(shù)與拷貝構(gòu)造函數(shù),需要的朋友可以參考下
    2014-07-07
  • C語言實現(xiàn)隨機抽取紙牌程序

    C語言實現(xiàn)隨機抽取紙牌程序

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)隨機抽取紙牌程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • VS2022新建項目時沒有ASP.NET Web應(yīng)用程序(.NET Framework)

    VS2022新建項目時沒有ASP.NET Web應(yīng)用程序(.NET Framework)

    本文主要介紹了VS2022新建項目時沒有ASP.NET Web應(yīng)用程序的解決,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-10-10
  • 淺析C語言編程中的數(shù)組越界問題

    淺析C語言編程中的數(shù)組越界問題

    這篇文章主要介紹了淺析C語言編程中的數(shù)組越界問題,通過內(nèi)存空間來討論其導(dǎo)致的程序崩潰問題,需要的朋友可以參考下
    2015-11-11
  • C語言單向鏈表的表示與實現(xiàn)實例詳解

    C語言單向鏈表的表示與實現(xiàn)實例詳解

    這篇文章主要介紹了C語言單向鏈表的表示與實現(xiàn),需要的朋友可以參考下
    2014-07-07
  • C++中的多態(tài)詳談

    C++中的多態(tài)詳談

    多態(tài)通俗來說就是多種形態(tài),本文通過實例代碼給大家介紹C++中的多態(tài)定義及實現(xiàn),通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-05-05
  • c++中explicit與mutable關(guān)鍵字的深入探究

    c++中explicit與mutable關(guān)鍵字的深入探究

    這篇文章主要給大家介紹了關(guān)于c++中explicit與mutable關(guān)鍵字的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05

最新評論

云浮市| 罗山县| 儋州市| 蒲江县| 兴化市| 保定市| 株洲县| 牟定县| 长沙县| 南投市| 改则县| 依安县| 黔江区| 额尔古纳市| 固阳县| 兰西县| 苏尼特右旗| 秭归县| 乐陵市| 光山县| 定陶县| 塔河县| 历史| 石台县| 堆龙德庆县| 昆山市| 泰州市| 丰城市| 桃江县| 巴彦淖尔市| 明溪县| 峡江县| 卢龙县| 比如县| 黄梅县| 乌审旗| 陆河县| 闻喜县| 凤山县| 图木舒克市| 凤山市|