const_cast的用法

const_cast的用法

const_cast是一种C++运算符,作用是去除复合类型中的const或volatile属性

变量本身的const属性是不能去掉的,要想修改常量的值,一般是去除指向该变量的指针(引用)的const属性

具体使用实例如下:

#include 
using namespace std;

void constTest1()
{
    const int a = 5;
    int *p;
    p = const_cast(&a);      //如果写成p = &a;则会发生编译错误
    (*p)++;
    cout << "The a is:" << a << endl;
}

void constTest2()
{
    int i;
    cout << "请输入变量值:" << endl;
    cin >> i;

    const int a = i;
    int &n = const_cast(a);
    n++;

    cout << "The n is:" << n << endl;
}

int main()
{
    constTest1();
    constTest2();
    return 0;
}

程序运行结果如下:

The a is:5
请输入变量值:
8
The n is:9

虽然程序中constTest1函数输出的结果为5,但这并不能表明a的值没有改变,而是编译器将a优化为文字常量5

实际上a的值已经变成了6

在constTest2函数中,由于常变量无法转化为文字常量,所以它显示修改之后的值为6

使用const_cast需要注意的问题:

  1. const_cast的使用语法就是const_cast< type >(),且括号不能省略
  2. 原类型和目标类型必须一致,即不能使用const_cast去转换非char *的数据
  3. 一个变量被定义为const类型之后,那它就永远是常变量,即使通过const_cast也只是对间接引用时的改写限制,并不能改变变量的属性
  4. 使用C语言的强制类型转换也可以使const type &转换为type &,但不推荐这样做

文章内容来源:《C++高级进阶教程》(陈刚)

你可能感兴趣的:(C/C++,c++,const_cast)