对于const变量,我们不能修改它的值,这是这个限定符最直接的表现。但是我们就是想违背它的限定希望修改其内容怎么办呢?于是我们可以使用const_cast转换符是用来移除变量的const限定符。
      const_cast类型转换能够剥离一个对象的const属性,也就是说允许你对常量进行修改。

#include<iostream>
using namespace std;/*
用法:const_cast<type_id> (expression)该运算符用来修改类型的const或volatile属性。除了const 或volatile修饰之外, type_id和expression的类型是一样的。一、常量指针被转化成非常量指针,并且仍然指向原来的对象;二、常量引用被转换成非常量引用,并且仍然指向原来的对象;三、常量对象被转换成非常量对象。 type_id 必须为指针或引用
*/class B
{
public:int m_iNum;B() : m_iNum(50){   }
};void foo()
{const B *b1 = new B();//b1->m_iNum = 100;          // 编译错误// 做如下转换,体现出转换为指针类型B *b2 = const_cast<B*>(b1);b2->m_iNum = 200;cout<<"b1: "<< b1->m_iNum <<endl;cout<<"b2: "<< b2->m_iNum <<endl;const B b3;//b3.m_iNum = 100;     // 编译错误B b4 = const_cast<B&>(b3);          // b4是另外一个对象b4.m_iNum = 200;cout<<"b3: "<<b3.m_iNum <<endl;cout<<"b4: "<<b4.m_iNum <<endl;const B b5;//b5.m_iNum = 100;     // 编译错误// 或者左侧也可以用引用类型,如果对b6的数据成员做改变,就是对b5的值在做改变B &b6 = const_cast<B&>(b5);b6.m_iNum = 200;cout<<"b5: "<<b5.m_iNum <<endl;cout<<"b6: "<<b6.m_iNum <<endl;// force to convert const int x = 50;int* y = (int *)(&x);       // 同样的地址,但是内容是不一样的*y = 200;cout << "x: "<<x<<" address: "<<&x<<endl;cout << "*y: "<<*y<<" address: "<<y<<endl;cout<<endl;const int xx = 50;int* yy = const_cast<int *> (&xx);     // 同样的地址,但是内容是不一样的*yy = 200;cout << "xx: "<<xx<<" address: "<<&xx<<endl;cout << "*yy: "<<*yy<<" address: "<<yy<<endl;cout<<endl;// intconst int xxx = 50;int yyy = const_cast<int&> (xxx);     // yyy是另外一个int对象yyy = 200;cout << "xxx: "<<xxx<<" address: "<<&xxx<<endl;cout << "yyy: "<<yyy<<" address: "<<&yyy<<endl;
}int main(void)
{foo();return 0;
}

运行结果如下:

const_cast的应用相关推荐

  1. bug诞生记——const_cast引发只读数据区域写违例

    对于C++这种强类型的语言,明确的类型既带来了执行的高效,又让错误的发生提前到编译期.所以像const这类体现设计者意图的关键字,可以隐性的透露给我们它描述的对象的使用边界.它是我们的朋友,我们要学会 ...

  2. C++中static_cast/const_cast/dynamic_cast/reinterpret_cast的区别和使用

    C风格的强制转换较简单,如将float a转换为int b,则可以这样:b = (int)a,或者b=int(a). C++类型转换分为隐式类型转换和显示类型转换. 隐式类型转换又称为标准转换,包括以 ...

  3. C++知识点杂记1——typedef、static_cast、const_cast、遍历二维数组、聚合类

    1.typedef typedef一般是对某种类型的类型别名(不是变量别名) typedef double db;void mixtypename() {db d=1.2;cout<<d& ...

  4. static_cast, dynamic_cast, const_cast

    首先回顾一下C++类型转换: C++类型转换分为:隐式类型转换和显式类型转换 第1部分. 隐式类型转换 又称为"标准转换",包括以下几种情况: 1) 算术转换(Arithmetic ...

  5. C++中四种类型转换方式(ynamic_cast,const_cast,static_cast,reinterpret_cast)

    Q:什么是C风格转换?什么是static_cast, dynamic_cast 以及 reinterpret_cast?区别是什么?为什么要注意? A:转换的含义是通过改变一个变量的类型为别的类型从而 ...

  6. 【C++ 语言】类型转换 ( 转换操作符 | const_cast | static_cast | dynamic_cast | reinterpret_cast | 字符串转换 )

    文章目录 I . const_cast 转换操作符 II . static_cast 转换操作符 III . dynamic_cast 转换操作符 IV . reinterpret_cast 转换操作 ...

  7. dynamic_cast, static_cast, const_cast, reinterprt_cast浅析

    用法:dynamic_cast < type-id > ( expression ) 说明:Type-id必须是类的指针.类的引用或者void *:如果type-id是指针类型,那么exp ...

  8. C++强制类型转换:static_cast、dynamic_cast、const_cast、reinterpret_cast

    一.static_cast:static_cast<new_type> (expression) static_cast相当于传统的C语言里的强制转换,该运算符把expression转换为 ...

  9. C++中四种类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast要点解析

    1.static_cast typename dst_ptr = static_cast<typename> (src_ptr) 可用于c++基本类型之间的转换,子类与派生类之间的指针转换 ...

  10. C++类型转换: static_cast const_cast reinterpret_cast dynamic_cast

    * C++提供了四种新的类型强制: static_cast const_cast reinterpret_cast dynamic_cast 1)staic_cast静态强制: 不能在无关的指针之间进 ...

最新文章

  1. scrapy_redis使用
  2. Python旋转图像到特定的角度(Rotate Image to a specific degree)
  3. 如何在iOS或macOS上检查活动的Internet连接?
  4. C++的clone函数什么时候需要重载
  5. Visual Studio 2008 中使用插件Extjs提示的方法
  6. [Python人工智能] 十五.无监督学习Autoencoder原理及聚类可视化案例详解
  7. Shell下的环境变量
  8. Sublime Text 设置在标签页中打开文件
  9. 【整理】fiddler不能监听 localhost和 127.0.0.1的问题
  10. 显卡服务器已停止响应,电脑提示显卡驱动已停止响应并且已成功恢复该怎么解决?...
  11. win7纯净版系统锁定系统时间的设置方法
  12. JS file图片即选即得显示,前端交互图片即选即得
  13. [Java] 获取当前Project所在的路径
  14. 80. Session
  15. Photoshop简单案例(5)——利用ps进行颜色替换
  16. 【Unity】打包WebGL项目遇到的问题及解决记录
  17. 用python写家族树的基本事实
  18. 填词作文:新的一年,新的梦想
  19. Solidity 基础(一)
  20. 2014阿里实习生面试题——mysql如何实现索引的

热门文章

  1. Algorithm of permutation(全排列算法)
  2. 会ps会php,学会ps可以做什么
  3. 阿里云服务网格 ASM 发布新功能:提供更精细化的服务治理能力
  4. mPaas-RPC拦截器各种场景下的使用指南
  5. 《糖豆人:终极淘汰赛》:如何打造最难关卡「水涨爬高」
  6. 《王者荣耀》主策划Xavier分享腾讯游戏10年在职经历
  7. unity实用技术:色盲玩家也能享受好的游戏体验
  8. 【BLOCK】Oracle 块管理常用SQL
  9. Linux stty
  10. Linux下rm -rf 后恢复文件