今天在回顾C++的const_cast的时候无意写了这样一段代码:
#include<iostream>
using namespace std;
int main(){
const int i=100;
int *p=const_cast<int *>(&i);
(*p)++;
cout<<p<<" "<<&i<<endl;
cout<<*p<<" "<<i<<endl;
}
101 100
结果分析如下:
1、首先给出const_cast的说明,《C++ primer》第五版中这样写道:“const_cast只能改变运算对象的底层const。如果对象本身不是一个常量,使用强制类型转换获得写权限是合法行为。然而如果对象本身是一个常量,再使用const_cast执行写操作就会产生未定义的行为。”
但是,以上代码中int型变量i本身是const的,利用const_cast消除了i的底层const,并让非const指针p指向i,通过p对i进行写操作。在code blocks和VS 2010下运行该程