• 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

  • 相关阅读:
    Ios8代码关闭输入预测问题
    iOS10 拍照崩溃问题
    iOS 圆的放大动画效果
    12-指针
    11-数组、字符串
    09-函数
    iOS 动画
    iOS 传值 委托(delegate)和block 对比
    IOS Table中Cell的重用reuse机制分析
    IOS 网络请求
  • 原文地址:https://www.cnblogs.com/dracohan/p/3417842.html
Copyright © 2020-2023  润新知