參考原文:https://www.cnblogs.com/teng-IT/p/5981294.html
const_cast是一種C++運算符,主要是用來去除復合類型中const和volatile屬性(沒有真正去除)。
變量本身的const屬性是不能去除的,要想修改變量的值,一般是去除指針(或引用)的const屬性,再進行間接修改。
用法:const_cast<type>(expression)
通過const_cast運算符,也只能將const type*轉換為type*,將const type&轉換為type&。
也就是說源類型和目標類型除了const屬性不同,其他地方完全相同。
#include<iostream>
using namespace std;
void ConstTest1(){
const int a = 5;
int *p;
p = const_cast<int*>(&a);
(*p)++;
cout<<a<<endl;
cout<<*p<<endl;
}
void ConstTest2(){
int i;
cout<<"please input a integer:";
cin>>i;
const int a = i;
int &r = const_cast<int &>(a);
r++;
cout<<a<<endl;
}
int main(){
ConstTest1();
ConstTest2();
return 0;
}
輸出:
5
6
若輸入7
則輸出8
ConstTest1:
當碰見const聲明時在符號表中放入常量
編譯過程中若發現使用常量則直接以符號表中的值替換
編譯過程中若發現下述情況則給對應的常量分配存儲空間(兼容C語言,保證C語言程序能編譯過去)
對const常量使用了extern
對const常量使用了&操作符
ConstTest2:
const int a = i這種賦值方式(用變量賦值),常量a的值i沒有進入符號表。后面就可以使用指針或引用修改
