C++ const_cast用法

const_cast是一種C++運算符,主要是用來去除複合類型中const和volatile屬性(沒有真正去除)。ios

變量自己的const屬性是不能去除的,要想修改變量的值,通常是去除指針(或引用)的const屬性,再進行間接修改。express

用法:const_cast<type>(expression)優化

經過const_cast運算符,也只能將const type*轉換爲type*,將const type&轉換爲type&。spa

也就是說源類型和目標類型除了const屬性不一樣,其餘地方徹底相同。指針

 1 #include<iostream>
 2 using namespace std;
 3 void ConstTest1(){
 4     const int a = 5;
 5     int *p;
 6     p = const_cast<int*>(&a);
 7     (*p)++;
 8     cout<<a<<endl;
 9     cout<<*p<<endl;
10     
11 }
12 void ConstTest2(){
13     int i;
14     cout<<"please input a integer:";
15     cin>>i;
16     const int a = i;
17     int &r = const_cast<int &>(a);
18     r++;
19     cout<<a<<endl;
20 }
21 int main(){
22     ConstTest1();
23     ConstTest2();
24     return 0;
25 }
26 輸出:
27 5
28 6
29 若輸入7
30 則輸出8

解釋爲何輸出8:code

當常變量爲 const int j =i 時,直接輸出j時,編譯器不能進行優化,也就是不可以直接用i代替j;blog

當常變量爲const int j =5時,直接輸出j時,編譯器會進行優化,也就是用文字常量5直接代替j;ci

相關文章
相關標籤/搜索