日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

在将varchar值id转换为int时失败_C++繁琐的类型转换,C++小知识之四种类型转换

發(fā)布時(shí)間:2025/4/16 c/c++ 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在将varchar值id转换为int时失败_C++繁琐的类型转换,C++小知识之四种类型转换 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

有時(shí),編程的過(guò)程中需要將值從一種數(shù)據(jù)類型轉(zhuǎn)換為另一種數(shù)據(jù)類型。

在C語(yǔ)言中,強(qiáng)制類型轉(zhuǎn)換的方式為(Type)Expression,另外還有一種現(xiàn)在已經(jīng)不用的舊式寫法Type(Expression),這兩種方式是等價(jià)的。

但是,C語(yǔ)言的強(qiáng)制類型轉(zhuǎn)換方式存在一些問(wèn)題:過(guò)于粗暴,可以在任意類型之間進(jìn)行轉(zhuǎn)換,編譯器很難判斷其正確性,難于定位,在源代碼中無(wú)法快速定位所有使用強(qiáng)制類型轉(zhuǎn)換的語(yǔ)句。

然而,強(qiáng)制類型轉(zhuǎn)換在實(shí)際工程中幾乎是不可避免的,為此C++將強(qiáng)制類型轉(zhuǎn)換分為4種不同的類型,以提供更加安全可靠的轉(zhuǎn)換。

static_cast

用法:static_cast (expression)

該運(yùn)算符把expression轉(zhuǎn)換為type-id類型,但沒有運(yùn)行時(shí)類型檢查來(lái)保證轉(zhuǎn)換的安全性。它主要有如下幾種用法:

(1)用于類層次結(jié)構(gòu)中基類和派生類之間指針或引用的轉(zhuǎn)換。

進(jìn)行上行轉(zhuǎn)換(把派生類的指針或引用轉(zhuǎn)換成基類表示)是安全的

進(jìn)行下行轉(zhuǎn)換(把基類的指針或引用轉(zhuǎn)換為派生類表示),由于沒有動(dòng)態(tài)類型檢查,所以是不安全的

(2)用于基本數(shù)據(jù)類型之間的轉(zhuǎn)換,如把int轉(zhuǎn)換成char。這種轉(zhuǎn)換的安全也要開發(fā)人員來(lái)保證

(3)把空指針轉(zhuǎn)換成目標(biāo)類型的空指針

(4)把任何類型的表達(dá)式轉(zhuǎn)換為void類型

注意:static_cast不能轉(zhuǎn)換掉expression的const、volitale或者_(dá)_unaligned屬性。主要用于基本類型之間、有繼承關(guān)系的類對(duì)象之間、類指針之間的轉(zhuǎn)換,不能用于基本類型指針之間的轉(zhuǎn)換。

比如:下面代碼第五行會(huì)報(bào)錯(cuò),“static_cast”: 無(wú)法從“float *”轉(zhuǎn)換為“int *”

const_cast

用法:const_cast (expression)

該運(yùn)算符用來(lái)修改類型的const或volatile屬性。除了const 或volatile修飾之外, type_id和expression的類型是一樣的。

常量指針被轉(zhuǎn)化成非常量指針,并且仍然指向原來(lái)的對(duì)象;

常量引用被轉(zhuǎn)換成非常量引用,并且仍然指向原來(lái)的對(duì)象;常量對(duì)象被轉(zhuǎn)換成非常量對(duì)象。

注意:用于去除變量的只讀屬性,強(qiáng)制轉(zhuǎn)換的目標(biāo)類型必須是指針或引用

比如:下面代碼第二行會(huì)報(bào)錯(cuò),“const_cast”: 無(wú)法從“const int”轉(zhuǎn)換為“int”,值得注意的是,強(qiáng)轉(zhuǎn)去掉常量屬性之后通過(guò)指針修改變量,并不能改變?cè)境A康闹?#xff0c;在【C++const常量玩出新花樣】中有講到

結(jié)果:

reinterpret_cast

用法:reinterpret_cast (expression)

它可以把一個(gè)指針轉(zhuǎn)換成一個(gè)整數(shù),也可以把一個(gè)整數(shù)轉(zhuǎn)換成一個(gè)指針(先把一個(gè)指針轉(zhuǎn)換成一個(gè)整數(shù),在把該整數(shù)轉(zhuǎn)換成原類型的指針,還可以得到原先的指針值)。

該運(yùn)算符的用法比較多。

該運(yùn)算符平臺(tái)移植性比價(jià)差。

注意:type-id必須是一個(gè)指針、引用、算術(shù)類型、函數(shù)指針或者成員指針。用于指針類型之間、整數(shù)和指針類型之間的轉(zhuǎn)換

比如:下面代碼第三行會(huì)報(bào)錯(cuò),“reinterpret_cast”: 無(wú)法從“float”轉(zhuǎn)換為“int”。

dynamic_cast

用法:dynamic_cast (expression)該運(yùn)算符把expression轉(zhuǎn)換成type_id類型的對(duì)象。type_id必須是類的指針、引用或者void*;如果type_id是類指針類型,那么expression也必須是一個(gè)指針,如果type_id是一個(gè)引用,那么expression也必須是一個(gè)引用。 dynamic_cast主要用于有繼承關(guān)系的類層次間的上行轉(zhuǎn)換和下行轉(zhuǎn)換,還可以用于類之間的交叉轉(zhuǎn)換。

在類層次間進(jìn)行上行轉(zhuǎn)換時(shí),dynamic_cast和static_cast的效果是一樣的;

在進(jìn)行下行轉(zhuǎn)換時(shí),dynamic_cast具有類型檢查的功能,比static_cast更安全。

#include using namespace std;class parent{public:virtual void print(){cout << "parent" << endl;}};class son :public parent{public: void print(){cout << "son" << endl; } void printData() { cout << "printData" << endl; }};int main(){parent* ppParent = new son; //調(diào)用是子類中與virtual 的同名函數(shù)ppParent->print();//調(diào)用是子類中與virtual 的同名函數(shù)son* ppSon = nullptr;if ((ppSon = dynamic_cast(ppParent)) != nullptr){ppSon->print(); ppSon->printData();}else{cout << "轉(zhuǎn)換失敗" << endl;}system("pause");return 0;}

尾言

如果足下基礎(chǔ)比較差,不妨關(guān)注下人人都可以學(xué)習(xí)的視頻教程通俗易懂,深入淺出,一個(gè)視頻只講一個(gè)知識(shí)點(diǎn)。視頻不深?yuàn)W,不需要鉆研,在公交、在地鐵、在廁所都可以觀看,隨時(shí)隨地漲姿勢(shì)的視頻教程

總結(jié)

以上是生活随笔為你收集整理的在将varchar值id转换为int时失败_C++繁琐的类型转换,C++小知识之四种类型转换的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。