显式强制类型转换static_cast, dynamic_cast, const_cast, reinterpret_cast
显式强制类型转换(cast)包括以下操作符:
static_cast, dynamic_cast, const_cast, reinterpret_cast,对各种显式类型转换解释:
static_cast:编译器隐式执行的转换都可以有static_cast显式执行。
例子:
double num = 12.32;
int data = num;
这个例子完成了显式类型转换,当然我们完全可以显式告诉编译器我要转换类型不且不关心转换后精度损失,就可以写成是:int data = static_cast<int>(num);
dynamic_cast:支持运行时识别指针或引用所指向的对象,如果绑定到引用或指针的对象不是目标类型的对象,则dynamic_cast失败,如果转换到指针类型的dynamic_cast失败,则dynamic_cast的结果为0值;如果转换到引用类型的dynamic_cast失败,则抛出一个bad_cast类型的异常。
因此,dynamic_cast操作符一次执行两个操作。首先验证被请求的转换是否有效,只有转换有效,操作符才实际进行转换。基类的指针可以赋值为指向派生类的对象,同样,基类的引用也可以用派生类对象初始化,因此,dynamic_cast操作符执行的验证必须在运行时进行。
const_cast:将转换掉表达式的const性质.
例子:
const char * source = "zhangsan";
char * dest = source;
编译出现错误提示:error C2440: 'initializing' : cannot convert from 'const char *' to 'char *'
这时我们可以运用const_cast去掉source的const性质。改为
char * dest = const_cast<char *>(source);就通过了编译。
或者:
1.
const int a = 9;
const_cast<int &>(a) = 0;
2.
const char p[4] = {'a', 'b', 'c'};
char *q = const_cast<char *>(p);
q[0] = 'c';
cout << p << endl;
cout << q << endl;
注:char p[4] = "abc";编译器处理时,将其直接存储在只读内存区域,所以不允许p[1]='b'; 这样的修改。
reinterpret_cast:顾名思义reinterpret:重新解释。就是将操作数内容解释为另一种不同的类型。这种强制转换本质上依赖于机器,而且非常危险。
例子:
int * source ;
char *dest = reinterpret_cast<char *>(source);
如上,本来source本来指向的对象时int类型,但是想把这块内存重新解释为char类型,就用reinterpret_cast,但是这很危险,编程人员必须记住dest指向的真实对象其实是int类型。
你的例子问题在于,既然你用const定义常量,就不能改变a的值,但是你赋值了,所以错误。const_cast只是去掉const属性,并没说你可以改变其内容,只是可以讲const定义的常量赋值给其他的变量而已。
显式强制类型转换static_cast, dynamic_cast, const_cast, reinterpret_cast相关推荐
- C/C++中的数据类型转换()/static_cast/dynamic_cast/const_cast/reinterpret_cast
文章目录 前言 数据类型自动转换 C语言中的强制类型转换 C++中的强制类型转换 static_cast dynamic_cast const_cast reinterpret_cast 强转关键字的 ...
- 类型转换static_cast,dynamic_cast,const_cast,reinterpret_cast等
一.隐式类型转换 系统自动进行,不需要程序开发人员介入. int m = 3 +45.6; //把小数部分截掉,也属于隐式类型转换的一种行为. doublen = 3 +45.6; 二.显示类型转换( ...
- C++类型转换(static_cast,dynamic_cast,const_cast和reinterpret_cast)
一.概述 类型转换(cast)是将一种数据类型转换成另一种数据类型.例如,如果将一个整型值赋给一个浮点类型的变量,编译器会暗地里将其转换成浮点类型(即 隐式转换 ).转换是非常有用的,但是它也会带来一 ...
- C++ 11 深度学习(五)类型转换:static_cast dynamic_cast const_cast reinterpret_cast
四种cast 通用形式:强制类型转换名<type>(express) @强制类型转换名,以上四种 :@type:想要转成成的目标类型 : @express,需要转换的目标 static_ ...
- static_cast, dynamic_cast, const_cast,reinterpret_cast探讨
http://www.cnblogs.com/chio/archive/2007/07/18/822389.html 首先回顾一下C++类型转换: C++类型转换分为:隐式类型转换和显式类型转换 第1 ...
- 类型转换操作符:static_cast, dynamic_cast, const_cast, reinterpret_cast.
呵呵,今天来好好看看着几个转换操作符的用法.以前老是看着眼熟,但是用着手生.今天决定搞定这些个东西. 在C语言中类型转换有几种方式: 1. (expression). 在表达式外边加括号,由 ...
- c++类型转换:static_cast, dynamic_cast,const_cast和reinterpret_cast
static_cast 用法:static_cast < type-id > ( expression ) 说明:该运算符把expression转换为type-id类型,但没有运行时类型检 ...
- C++ static_cast dynamic_cast const_cast reinterpret_cast使用总结
因为原来C风格的暴力万能类型转换容易导致运行时出错,所以要引入分类更清晰提前发现错误的转换语法. 对象的类型转换包含了对象的引用或指针. 1.static_cast是编译器默认选项,该运算符把expr ...
- C++中static_cast, dynamic_cast, const_cast用法/使用情况及区别解析
目录 第1部分. 隐式类型转换 第2部分. 显式类型转换 static_cast dynamic_cast reinpreter_cast const_cast 首先回顾一下C++类型转换: C++类 ...
最新文章
- ADO.NET 2.0中的SqlCommand.ExecutePageReader
- app 404 html,静态页面错误404(Flask框架)
- 从Eclipse转移到IntelliJ IDEA一点心得
- 《Swift开发实战》——第16章,第16.2节下标脚本用法
- 0207.Domino R8.0.x群集配置手册
- bootstrap的表单验证 vue_第45天:Web表单
- 雷,大学教科书竟然使用番茄花园盗版系统
- eclipse中配置spring约束schema
- NUC980开发板Linux系统EC20模块 移植 串口 PPP拨号
- BeanUtils工具包下载及应用
- while循环python输入质数_Python学习之[while]循环
- 基于SIR模型的疫情预测 matlab
- nn.PReLU()和nn.ReLU
- import itchat ModuleNotFoundError: No module named 'itchat'
- python数码时钟代码_micro:bit 编程模拟时钟表盘
- [GIS笔记] 闾国年:从地图到场景的创新发展
- 【心理学】心理学效应
- 【win10】屏幕亮度无法调节的解决办法及相关注册表详解
- 给windows右键,添加快捷键
- 【Python篇】拟牛顿法面面俱到(一)--牛顿插值法
热门文章
- $_FILES[file]['error']
- 计算机程序的思维逻辑 (47) - 堆和PriorityQueue的应用
- LNMP--Nginx代理详解
- linux下以RPM方式安装MySQL5.5
- 2月第3周全球五大顶级域名总量净减6.1万个 降幅明显
- HOHO 拿了個小嘉獎 Happy一下 可惜過年可能被留下...痛苦
- RS-232、RS-422与RS-485标准
- 对 Web 应用程序进行性能调优
- 问:为什么python中有了全局解释器锁GIL,还要有互斥锁?
- 老王讲设计模式(一)——策略模式