C++ const_cast用法(轉)


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM