Posted on 2013-01-16 11:17
点点滴滴 阅读(3588)
评论(0) 编辑 收藏 引用 所属分类:
02 编程语言
案例1:
#include <iostream>
using namespace std;
int main()
{
const int a = 5;
const int * p = &a;
int *p_var = NULL;
p_var = const_cast <int*>(p); //强转为非const指针
cout << a <<endl;
*p_var = 10; //重新赋值
cout << "*p=" << *p << endl; //输出10
cout << "*p_var=" << *p_var << endl; //输出10
cout << "a=" << a << endl; //输出5
system("pause");
return 0;
}
以上代码将const int*强转为int*之后再赋值
为什么a的值没有变还是5
而*p 与 *p_var都是10
*****************分析的分割线***************************************
const_cast用来丢弃
变量的const
声明,但不能改变变量所指向的
对象的const
属性。即:const_cast用于
原本非const的对象;如果用于
原本const的
对象,结果不可预知(C++语言未对此种情况进行规定)
清注意我上面用下划线标示的“变量”vs“对象”
一般情况下const_cast是用于这种情形:const指针(变量)指向非const对象,程序员确认这一点(所指向的对象非const)时,使用const_cast操作符丢弃变量的const修饰获得一个非const指针
看看《The C++ Programming language(special edition)》第15.4.2.1节的最后一段,仔细揣摩它的每个词