const_cast转换运算符用来去除变量的底层const属性,这里的变量的类型是指针或者引用类型,因为普通类型并没有底层const属性这个说法。
const_cast使用实例:代码转自:IT男汉:C++ const_cast用法
#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;
cout << *(&a) << endl;
}
int main()
{
ConstTest1();
return 0;
}
输出结果:
?
这里我觉得十分奇怪,为什么第一行和第三行的输出还是5呢。偶然间看到了volatile关键字,于是将const int a 改为const int volatile a。代码变成
#include<iostream>
using namespace std;
void ConstTest1() {
const int volatile a = 5;
int *p;
p = const_cast<int*>(&a);
(*p)++;
cout << a << endl;
cout << *p << endl;
cout << *(&a) << endl;
}
int main()
{
ConstTest1();
return 0;
}
输出结果
?现在所有的输出都是修改后的值了,为什么不加volatile关键字时输出是5呢。究其原因,是因为编译器悄悄地做了优化,具体的原因见下图,图片来源:菜鸟教程:C/C++ 中 volatile 关键字详解
|