文章目录
我们知道一个类型转化为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;
输出内容如下,成功进行了修改: