const_cast的应用
对于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的应用相关推荐
- bug诞生记——const_cast引发只读数据区域写违例
对于C++这种强类型的语言,明确的类型既带来了执行的高效,又让错误的发生提前到编译期.所以像const这类体现设计者意图的关键字,可以隐性的透露给我们它描述的对象的使用边界.它是我们的朋友,我们要学会 ...
- C++中static_cast/const_cast/dynamic_cast/reinterpret_cast的区别和使用
C风格的强制转换较简单,如将float a转换为int b,则可以这样:b = (int)a,或者b=int(a). C++类型转换分为隐式类型转换和显示类型转换. 隐式类型转换又称为标准转换,包括以 ...
- C++知识点杂记1——typedef、static_cast、const_cast、遍历二维数组、聚合类
1.typedef typedef一般是对某种类型的类型别名(不是变量别名) typedef double db;void mixtypename() {db d=1.2;cout<<d& ...
- static_cast, dynamic_cast, const_cast
首先回顾一下C++类型转换: C++类型转换分为:隐式类型转换和显式类型转换 第1部分. 隐式类型转换 又称为"标准转换",包括以下几种情况: 1) 算术转换(Arithmetic ...
- C++中四种类型转换方式(ynamic_cast,const_cast,static_cast,reinterpret_cast)
Q:什么是C风格转换?什么是static_cast, dynamic_cast 以及 reinterpret_cast?区别是什么?为什么要注意? A:转换的含义是通过改变一个变量的类型为别的类型从而 ...
- 【C++ 语言】类型转换 ( 转换操作符 | const_cast | static_cast | dynamic_cast | reinterpret_cast | 字符串转换 )
文章目录 I . const_cast 转换操作符 II . static_cast 转换操作符 III . dynamic_cast 转换操作符 IV . reinterpret_cast 转换操作 ...
- dynamic_cast, static_cast, const_cast, reinterprt_cast浅析
用法:dynamic_cast < type-id > ( expression ) 说明:Type-id必须是类的指针.类的引用或者void *:如果type-id是指针类型,那么exp ...
- C++强制类型转换:static_cast、dynamic_cast、const_cast、reinterpret_cast
一.static_cast:static_cast<new_type> (expression) static_cast相当于传统的C语言里的强制转换,该运算符把expression转换为 ...
- C++中四种类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast要点解析
1.static_cast typename dst_ptr = static_cast<typename> (src_ptr) 可用于c++基本类型之间的转换,子类与派生类之间的指针转换 ...
- C++类型转换: static_cast const_cast reinterpret_cast dynamic_cast
* C++提供了四种新的类型强制: static_cast const_cast reinterpret_cast dynamic_cast 1)staic_cast静态强制: 不能在无关的指针之间进 ...
最新文章
- scrapy_redis使用
- Python旋转图像到特定的角度(Rotate Image to a specific degree)
- 如何在iOS或macOS上检查活动的Internet连接?
- C++的clone函数什么时候需要重载
- Visual Studio 2008 中使用插件Extjs提示的方法
- [Python人工智能] 十五.无监督学习Autoencoder原理及聚类可视化案例详解
- Shell下的环境变量
- Sublime Text 设置在标签页中打开文件
- 【整理】fiddler不能监听 localhost和 127.0.0.1的问题
- 显卡服务器已停止响应,电脑提示显卡驱动已停止响应并且已成功恢复该怎么解决?...
- win7纯净版系统锁定系统时间的设置方法
- JS file图片即选即得显示,前端交互图片即选即得
- [Java] 获取当前Project所在的路径
- 80. Session
- Photoshop简单案例(5)——利用ps进行颜色替换
- 【Unity】打包WebGL项目遇到的问题及解决记录
- 用python写家族树的基本事实
- 填词作文:新的一年,新的梦想
- Solidity 基础(一)
- 2014阿里实习生面试题——mysql如何实现索引的