const_cast是一种C++运算符,主要是用来去除复合类型中const和volatile属性(没有真正去除)。

变量本身的const属性是不能去除的,要想修改变量的值,一般是去除指针(或引用)的const属性,再进行间接修改。

用法:const_cast<type>(expression)

通过const_cast运算符,也只能将const type*转换为type*,将const type&转换为type&。

也就是说源类型和目标类型除了const属性不同,其他地方完全相同。

 1 #include<iostream>
 2 using namespace std;
 3 void ConstTest1(){
 4     const int a = 5;
 5     int *p;
 6     p = const_cast<int*>(&a);
 7     (*p)++;
 8     cout<<a<<endl;
 9     cout<<*p<<endl;
10
11 }
12 void ConstTest2(){
13     int i;
14     cout<<"please input a integer:";
15     cin>>i;
16     const int a = i;
17     int &r = const_cast<int &>(a);
18     r++;
19     cout<<a<<endl;
20 }
21 int main(){
22     ConstTest1();
23     ConstTest2();
24     return 0;
25 }
26 输出:
27 5
28 6
29 若输入7
30 则输出8

解释为什么输出8:

当常变量为 const int j =i 时,直接输出j时,编译器不能进行优化,也就是不能够直接用i代替j;

当常变量为const int j =5时,直接输出j时,编译器会进行优化,也就是用文字常量5直接代替j;

转载于:https://www.cnblogs.com/teng-IT/p/5981294.html

C++ const_cast用法相关推荐

  1. C++中static_cast, dynamic_cast, const_cast用法/使用情况及区别解析

    目录 第1部分. 隐式类型转换 第2部分. 显式类型转换 static_cast dynamic_cast reinpreter_cast const_cast 首先回顾一下C++类型转换: C++类 ...

  2. C++ const_cast用法

    const_cast是一种C++运算符,主要是用来去除复合类型中const和volatile属性(没有真正去除). 变量本身的const属性是不能去除的,要想修改变量的值,一般是去除指针(或引用)的c ...

  3. 浅谈static_cast、dynamic_cast、const_cast、reinterpret_cast用法

    C++中的类型转换分两种:隐式类型转换和显式类型转换. 隐式转换,是标准的转换,很多时候是默认情况下由编译器进行转换: 显式转换,在C++中有四个类型的转换符:static_cast.dynamic_ ...

  4. static_cast, dynamic_cast, const_cast

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

  5. C++ reinterpret_cast,const_cast等 显式类型转换总结

    C++代码   #include<iostream.h> int main(void) { //reinterpret_cast //将一个类型指针转换为另一个类型指针,这种在转换不修改指 ...

  6. 标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast(转载)

    C 风格(C-style)强制转型如下: (T) exdivssion // cast exdivssion to be of type T 函数风格(Function-style)强制转型使用这样的 ...

  7. static_cast, dynamic_cast, const_cast学习和探讨

    一 C语言中存在着两种类型转换: 隐式转换和显式转换 隐式转换:不同数据类型之间赋值和运算,函数调用传递参数--编译器完成 1) 算术转换(Arithmetic conversion) : 在混合类型 ...

  8. C++四种强制类型转换 dynamic_cast,const_cast,static_cast,reinterpret_cast

    综述 dynamic_cast  用于多态类型的转换 static_cast 用于非多态类型的转换 const_cast  用于删除 const.volatile 和 __unaligned 特性 r ...

  9. 【C++专题】static_cast, dynamic_cast, const_cast探讨

    首先回顾一下C++类型转换: C++类型转换分为:隐式类型转换和显式类型转换. 第1部分. 相关概念解释 上行转换(up-casting):把子类的指针或引用转换成基类表示. 下行转换(down-ca ...

最新文章

  1. mac 安装mqtt
  2. SAP相关会计科目的设置OBYC
  3. python程序开子进程打包成exe文件运行炸内存原因剖析
  4. xib 设置阴影_使用“IBInspectable”XIB设置圆角、边框、阴影
  5. AngularJs详细
  6. 模拟器显示空白图片_Kawaks街机模拟器,还是小时候的味道!
  7. 安装Windows10 64位提示“只能安装到GPT分区”,怎么办?
  8. ZDI 公布2020年 Pwn2Own 东京赛规则和奖金
  9. 分值展示时,只显示评委分数,但不显示评委名称或评委编号等标识,如何进行前期准备操作?
  10. 大一计算机word排版试题,Word排版练习题
  11. 进销存管理系统基本功能
  12. android解锁方法,手机如何解锁密码 几种安卓手机解锁方法介绍
  13. MaxCompute SQL引用第三方Base64JAR实现编解码
  14. Python暂停的几种方法
  15. 天下谁人不识君,体面的礼品
  16. Linux下2D、3D的测试软件glxgears
  17. Spring+Hibernate双数据源测试Mysql集群读写分离(转自http://blog.csdn.net/hzw2312/article/details/9083519)
  18. Git版本控制工具和Github代码托管平台
  19. 微信小程序-查询快递
  20. 详解JUC高并发编程

热门文章

  1. npm run mock | npm run dev只能启动一个
  2. python_threading模块实现多线程详解(转)
  3. 小程序 数据缓存
  4. 廖雪峰js教程笔记9 json
  5. |Vijos|贪心|P1414 Dejected Birthday-盗窃
  6. asp控件Repeater运用
  7. ibatis解决sql注入问题
  8. Java逆向基础之AspectJ的Eclipse插件AJDT
  9. 优达学城数据分析师纳米学位——P5项目知识点整理贝叶斯规则
  10. nginx配置反向代理解决前后端分离跨域问题