C++-const_cast只能用于指针和引用,对象的const到非const可以用static_cast

 

Static_cast可以对对象也可以对指针也可以对引用,但是const_cast只可以对指针和引用使用,后者不可以对对象用,如果你要把一个const值转化为非const值只能用隐式执行或通过使用static_cast、C 样式转换或函数样式转换执行。

 

比如:

   const int aa = 10;

   //int bb = const_cast<int>(aa);错误

 

int bb = int(aa);//传统的c转化方式

int bb = static_cast<int>(aa);//static_cast也可以

 

如果是指针使用就有一个返回的对象要是一个指针,结果指针是指向原指针的,但是不可以认为原来的指针性质已经变化了,依旧不可以直接改变他的值,但是可以通过结果指针改变,引用一样:

  int p = 20;

  const int *pp = &p;

  int *ppp = const_cast<int *>(pp);

  *ppp = 30;

  //*pp = 40;错误,但是可以通过PPP来改变pp的值

cout << *pp << p <<endl; //3030

对于引用也存在这个问题:

  int c = 10;

  const int &a  = c;

  int &b = const_cast<int &>(a);

  cout << a << b << c <<endl;//101010

//a = 12;

  b = 12;

cout << a << b << c <<endl;//121212

记住一点,就是cast<>的尖括号里面的一定要是对应的如果本身是指针就用指针,是引用就要用引用。

可以看到上面的b可以改变a乃至c的值,但是不能通过a来改变,因为a仍旧常量。

还要注意一个问题就是返回的值不是传给引用,还是可以成功的,相当于转化后的值产生了一个临时中间值,传给了结果值!如下:

  int c = 10;

  const int &a  = c;

  int b = const_cast<int &>(a); //临时变量出现

  cout << a << b << c <<endl; //101010

  //a = 12;

  b = 12;

cout << a << b << c <<endl;//101210

http://blog.csdn.net/ztz0223/article/details/2589737

posted on 2013-11-11 14:05  醉清风JM  阅读(1584)  评论(0编辑  收藏  举报

导航