关于c++中的类型转换符
const_cast(链接)
用来去掉const或volatile属性
volatile:
- 用于并行设备的硬件寄存器(状态寄存器),
- 中断服务子程序中会访问到的非自动变量,
- 多线程中被几个任务共享的变量
一般用来将常量指针变为非常亮指针, 常量引用变为非常量引用, 常量对象变为非常量对象
static_cast(链接)
强制类型转换:(不含类型转换的安全检查)
子类指针转换为父类指针,父类指针可以转换为子类指针(但是不安全)
用于:
- 类中基类和派生类指针和引用的转换
- 基本类型转换(相当于c语言中的类型转换)
- 空指针转换为目标类型的空指针
- 任何类型转换为void类型
- 不可以去掉const volatile expression类型
reinterpret_cast
仅仅重新解释类型,但没有进行二进制的转换:
1. 转换的类型必须是一个指针、引用、算术类型、函数指针或者成员指针。
2. 在比特位级别上进行转换。它可以把一个指针转换成一个整数,也可以把
一个整数转换成一个指针(先把一个指针转换成一个整数,再把该整数转换成
原类型的指针,还可以得到原先的指针值)。但不能将非32bit的实例转成指
针。
3. 最普通的用途就是在函数指针类型之间进行转换。
4. 很难保证移植性。
例子:
- int doSomething(){return 0;};
- typedef void(*FuncPtr)();
- //FuncPtr is 一个指向函数的指针,该函数没有参数,返回值类型为 void
- FuncPtr funcPtrArray[10];
- //10个FuncPtrs指针的数组 让我们假设你希望(因为某些莫名其妙的原因)把一个指向下面函数
- 的指针存入funcPtrArray数组:
- funcPtrArray[0] = &doSomething;
- // 编译错误!类型不匹配,reinterpret_cast可以让编译器以你的方法去看待它们:funcPtrArray
- funcPtrArray[0] = reinterpret_cast<FuncPtr>(&doSomething);
- //不同函数指针类型之间进行转换
用于以二进制形式重新解释类型,但是没有进行二进制的类型转换
dynamic_cast
有条件转换,动态类型转换,运行时类型安全检查(转换失败返回
NULL):
1. 安全的父类和子类之间转换。
2. 必须要有虚函数。
3. 相同父类不同子类之间的交叉转换。但结果是NULL。
例子:
class BaseClass
{
public:
int m_iNum;
virtual void foo(){};
};
基类必须有虚函数。保持多态特性才能使用dynamic_cast
总结
去const属性用const_cast。
基本类型转换用static_cast。
多态类之间的类型转换用dynamic_cast。
不同类型的指针类型转换用reinterpret_cast
关于c++中的类型转换符的更多相关文章
- C++里的强制类型转换符reinterpret_cast、static_cast 、dynamic_cast、const_cast 区别
C 风格(C-style)强制转型如下: (T) exdivssion // cast exdivssion to be of type T 函数风格(Function-style)强制转型使用这样的 ...
- [转]C++中四种类型转换符的总结
C++中四种类型转换符的总结 一.reinterpret_cast用法:reinpreter_cast<type-id> (expression) reinterpret_cast操 ...
- C++中的四种强制类型转换符详解
阅读目录 C++即支持C风格的类型转换,又有自己风格的类型转换.C风格的转换格式很简单,但是有不少缺点的: 转换太过随意,可以在任意类型之间转换.你可以把一个指向const对象的指针转换成指向非con ...
- C语言中强制类型转换总结
C语言中强制类型转换总结 ● 字符型变量的值实质上是一个8位的整数值,因此取值范围一般是-128-127,char型变量也可以加修饰符unsigned,则unsigned char 型变量的取值范围 ...
- JS中数据类型转换
JS中数据类型转换汇总 JS中的数据类型分为 [基本数据类型] 数字 number 字符串 string 布尔 boolean 空 null 未定义 undefined [引用数据类型] 对象 obj ...
- java中的修饰符和基本数据类型
1.java中的修饰符 java中的修饰符主要是用来对类资源进行一个权限控制,上面表格表现的很清晰,无需多言. 2.java中的基本数据类型 java中的数据类型分为引用类型和基本类型.基本数据类型有 ...
- JAVA语言中的修饰符
JAVA语言中的修饰符 -----------------------------------------------01--------------------------------------- ...
- JavaScript中数据类型转换总结
JavaScript中数据类型转换总结 在js中,数据类型转换分为显式数据类型转换和隐式数据类型转换. 1, 显式数据类型转换 a:转数字: 1)Number转换: 代码: var a = " ...
- java中强制类型转换
在Java中强制类型转换分为基本数据类型和引用数据类型两种,这里我们讨论的后者,也就是引用数据类型的强制类型转换. 在Java中由于继承和向上转型,子类可以非常自然地转换成父类,但是父类转换成子类则需 ...
随机推荐
- The 10 Best Studio Headphones of 2019
The 10 Best Studio Headphones of 2019 https://www.outeraudio.com/category/list/ https://www.outeraud ...
- 【Spring Boot学习之二】WEB开发
环境 Java1.8 Spring Boot 1.3.2 一.静态资源访问 动静分离:动态服务和前台页面图片分开,静态资源可以使用CDN加速;Spring Boot默认提供静态资源目录位置需置于cla ...
- 【Maven学习】Eclipse使用maven问题集
环境 jdk 1.8 eclipse 4.7 apache-maven-3.6.1 一.eclipse 编译maven工程步骤 1.Update Project 2.maven clean 3.mav ...
- [转帖]/proc/sys目录下各文件参数说明
/proc/sys目录下各文件参数说明 https://blog.csdn.net/luteresa/article/details/68061881 一.前言 本文档针对OOP8生产环境,具体优 ...
- 超级简单POI导出Excel实战
在一般的生产管理系统都会将数据通过页面导出到Excel,这里以Java为例通过第三方开源poi进行对Excel的操作,具体操作如下 1.引入jar包依赖 这里我以maven的方式引入jar包,具体依赖 ...
- C++中const限定符
const基础 C++中的const,用于定义一个常量,这个常量的值不能被修改.因为const对象一旦创建就不能修改,所以const对象必须初始化.const常量特征仅仅在执行改变其本身的操作时才会发 ...
- Python3 - 数字类型
在 Python 中,数字并不是一个真正的对象类型,而是一组类似类型的分类.Python 不仅支持通常的数字类型(整数和浮点数),而且还能够通过常量去直接创建数字以及处理数字的表达式.数字数据类型是不 ...
- Tkint中Label&Button&Scale的使用
top.geometry()设定窗口的初始大小 scale.set()设定滑块的初始值 scale.get()获取滑块变化的值 控件通过回调函数与其他控件进行通信(Label控件中的文本会受到Scal ...
- Go 基本数据类型
Go基础语法 package main import "fmt" func main(){ fmt.Println("Hello world") } 注意点: ...
- head first c# -- 第七章 (接口与抽象类)
接口的作用: 例子:有鸡,鸭,牛,羊4个类,还有farmer类: farmer.feed(obj obj) { obj.eat() } // 没有接口: farmer.feedChicken(Chic ...