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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

const_cast的应用

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

總結

以上是生活随笔為你收集整理的const_cast的应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。