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

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

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

const_cast的应用

發(fā)布時(shí)間:2024/7/5 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 const_cast的应用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
????? 對(duì)于const變量,我們不能修改它的值,這是這個(gè)限定符最直接的表現(xiàn)。但是我們就是想違背它的限定希望修改其內(nèi)容怎么辦呢?于是我們可以使用const_cast轉(zhuǎn)換符是用來(lái)移除變量的const限定符。
????? const_cast類(lèi)型轉(zhuǎn)換能夠剝離一個(gè)對(duì)象的const屬性,也就是說(shuō)允許你對(duì)常量進(jìn)行修改。
#include<iostream> using namespace std;/* 用法:const_cast<type_id> (expression)該運(yùn)算符用來(lái)修改類(lèi)型的const或volatile屬性。除了const 或volatile修飾之外, type_id和expression的類(lèi)型是一樣的。一、常量指針被轉(zhuǎn)化成非常量指針,并且仍然指向原來(lái)的對(duì)象;二、常量引用被轉(zhuǎn)換成非常量引用,并且仍然指向原來(lái)的對(duì)象;三、常量對(duì)象被轉(zhuǎn)換成非常量對(duì)象。 type_id 必須為指針或引用 */class B { public:int m_iNum;B() : m_iNum(50){ } };void foo() {const B *b1 = new B();//b1->m_iNum = 100; // 編譯錯(cuò)誤// 做如下轉(zhuǎn)換,體現(xiàn)出轉(zhuǎn)換為指針類(lèi)型B *b2 = const_cast<B*>(b1);b2->m_iNum = 200;cout<<"b1: "<< b1->m_iNum <<endl;cout<<"b2: "<< b2->m_iNum <<endl;const B b3;//b3.m_iNum = 100; // 編譯錯(cuò)誤B b4 = const_cast<B&>(b3); // b4是另外一個(gè)對(duì)象b4.m_iNum = 200;cout<<"b3: "<<b3.m_iNum <<endl;cout<<"b4: "<<b4.m_iNum <<endl;const B b5;//b5.m_iNum = 100; // 編譯錯(cuò)誤// 或者左側(cè)也可以用引用類(lèi)型,如果對(duì)b6的數(shù)據(jù)成員做改變,就是對(duì)b5的值在做改變B &b6 = const_cast<B&>(b5);b6.m_iNum = 200;cout<<"b5: "<<b5.m_iNum <<endl;cout<<"b6: "<<b6.m_iNum <<endl;// force to convert const int x = 50;int* y = (int *)(&x); // 同樣的地址,但是內(nèi)容是不一樣的*y = 200;cout << "x: "<<x<<" address: "<<&x<<endl;cout << "*y: "<<*y<<" address: "<<y<<endl;cout<<endl;const int xx = 50;int* yy = const_cast<int *> (&xx); // 同樣的地址,但是內(nèi)容是不一樣的*yy = 200;cout << "xx: "<<xx<<" address: "<<&xx<<endl;cout << "*yy: "<<*yy<<" address: "<<yy<<endl;cout<<endl;// intconst int xxx = 50;int yyy = const_cast<int&> (xxx); // yyy是另外一個(gè)int對(duì)象yyy = 200;cout << "xxx: "<<xxx<<" address: "<<&xxx<<endl;cout << "yyy: "<<yyy<<" address: "<<&yyy<<endl; }int main(void) {foo();return 0; }運(yùn)行結(jié)果如下:

總結(jié)

以上是生活随笔為你收集整理的const_cast的应用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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