0
点赞
收藏
分享

微信扫一扫

C++中的类型转换:const_cast

我是小瘦子哟 2022-01-05 阅读 72
c++

文章目录

我们知道一个类型转化为const是很方便的,只需要在类型前加const关键字就可以,但是如何去掉一个const类型参数的不可修改的属性呢?

const_cast的基本用法

1. 基础数据类型去const

基础类型使用const_cast转化有一个很特殊的特点,即常量展开。常量展开类似于宏定义,程序将会在编译的时候对变量进行了数值替换,这种特点只出现在基本类型的const变量中。

相关代码如下:

    const int m = 10;
    const_cast<int&>(m) = 100;
    cout << m << " | " << *(&m) <<  endl; 
    // 不同的版本对*(&m)的处理不同

运行结果为:
在这里插入图片描述
我们发现变量m和对m所在地址的内容*(&m)是不同的,原因就是我们上述所说的常量展开,这也是为什么我们说const_cast常用于指针类型转化。

2. 非基础数据类型去const

非基础类型去const就很好理解了,我们直接使用const_cast进行转换就可以对参数进行修改了,接下来以一段代码为例。

代码如下:

    const vector<int> vec = {1,2,3,4};
    // vec[1] = 10;
    const_cast<vector<int>&>(vec)[1] = 10;
    for(auto n:vec){
        cout << n << " ";
    }
    cout << endl;

输出内容如下,成功进行了修改:

在这里插入图片描述

举报

相关推荐

0 条评论