參考原文: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沒有進入符號表。后面就可以使用指針或引用修改