reinterpret_cast是C++里面的一个强制类型转换符,能够将任何的指针类型转换成其他的任何指针类型;能够将任何的整数类型转换成指针类型,反之亦然;滥用reinterpret_cast强制类型转换符不安全。除非要转换成的类型是固有的低级别的,不然要考虑使用其他的转换操作符。
a、reinterpret_cast强制类型转换符能够将字符串类型的指针转换成整型指针(char *  ->  int *),某个类类型的指针转换成另外一个不相关类类型的指针(classA * -> class B *);这些转换不安全。
b、使用reinterpret_cast强制转换之后的结果很不安全,除非用来转换成它的原始类型。
c、reinterpret_cast不能用来移除变量的const、volatile等属性。
d、reinterpret_cast可以将一个空类型的指针转换成一个目标类型的空指针值。
 
2、static_cast < type-id > ( expression )
static_cast将要转换的expression唯一的转换成type_id类型,在运行的时候也不检测是否这种转换之后的结果安全性。
a、将一个基类的指针转换成派生类的指针,但是这种转换经常很不安全。但是将一个基类指针转换成基类指针或将派生类指针转换成派生类指针是安全的。
b、static_cast可以执行任何的隐式转换,包括标准类型和用户自定义类型。
c、static_cast可以显式的将整型转换成枚举类型,如果整型数据的值不在枚举类型值的范围之类,那么该枚举类型的值无效。
d、static_cast可以将任何expression显式的转换成空类型,转换后的空类型可以选择性的包含const、volatile等属性。
e、static_cast不能用来移除变量的const、volatile等属性。
 
3、const_cast < type-id > ( expression )
const_cast 可以用来移除一种类型的const、volatile等属性。
a、常量指针转换成非常量指针,指针任然指向原来的对象,转换后,可以通过指针修改对象的值。
b、常量引用被转换成非常量引用,任然引用原来的对象。
c、const_cast可以将一个空类型的指针转换成一个目标类型的空指针值。
 
4、dynamic_cast < type-id > ( expression )
该运算符将expression转换成type_id类型的对象。type_id必须是类的指针,类的引用或者空类型的指针。
a、如果type_id是一个指针类型,那么expression也必须是一个指针类型,如果type_id是一个引用类型,那么expression也必须是一个引用类型。
b、如果type_id是一个空类型的指针,在运行的时候,就会检测expression的实际类型,结果是一个由expression决定的指针类型。
c、如果type_id不是空类型的指针,在运行的时候指向expression对象的指针能否可以转换成type_id类型的指针。
d、在运行的时候决定真正的类型,如果向下转换是安全的,就返回一个转换后的指针,若不安全,则返回一个空指针。
e、主要用于上下行之间的转换,也可以用于类之间的交叉转换。上行转换时和static_cast效果一样,下行转换时,具有检测功能,比static_cast更安全。
 

C++中4个类型转换相关的关键字/特点/应用场合的更多相关文章

  1. C++中,有哪4种与类型转换相关的关键字?各有什么特点?应该在什么场合下使用?

    转:https://www.cnblogs.com/mjiang2017/p/9358032.html C++中,四个与类型转换相关的关键字:static_cast.const_cast.reinte ...

  2. c++中4个与类型转换相关的关键字分析

    static_cast reinterpret_cast dynamic_cast const_cast 1.**static_cast------运算符完成相关类型之间的转换** 使用场景:如在同一 ...

  3. C#中的强制类型转换与as转换的区别

    C#中的强制类型转换 例如有ClassA与ClassB两个类创建两个类的对象进行转换 1 2 ClassA a = new ClassA();  ClassB b = new ClassB(); 如果 ...

  4. Selenium2Lib库之操作浏览器相关的关键字实战

    1.1  操作浏览器相关的关键字 Selenium2Lib提供了与浏览器交互的关键词 1.1.1 Open Browser关键字 按F5 查看Open Browser关键字的说明,如下图: Open ...

  5. 谈 JavaScript 中的强制类型转换 (2. 应用篇)

    这一部分内容是承接上一篇的, 建议先阅读谈 JavaScript 中的强制类型转换 (1. 基础篇) 前两章讨论了基本数据类型和基本包装类型的关系, 以及两个在类型转换中十分重要的方法: valueO ...

  6. flask的jinja2模板中过过滤器的相关小内容

    jinja2模板中有自带的过滤器,有需要直接拿来使用.也可以自己定义过滤器 在过滤器中,有一些常见得操作及关键字.有对字符串的操作,还有对大小写转换的操作.还有对list的操作 过滤器的语法 {# 过 ...

  7. Java中的Serializable接口和transient关键字

    Java中的Serializable接口和transient关键字 Table of Contents 1. 向memcached中放数据时遇到NotSerializableException异常 2 ...

  8. 转 java 中int String类型转换

    转自licoolxue https://blog.csdn.net/licoolxue/article/details/1533364 int -> String int i=12345;Str ...

  9. C++ 类类型转换函数explicit 关键字

    标准数据之间会进行  隐式类型安全转换. 转换规则: 隐式类型转换的问题: #include <iostream> #include <string> using namesp ...

随机推荐

  1. JVM学习笔记一:内存管理

    参考资料 本文参考:<深入理解Java虚拟机>作者 周志明 知识产权归作者所有 走近java java组成部分:java语言.各平台虚拟机.Class文件结构.java api 类库.第三 ...

  2. Centos6.5中Nginx部署基于IP的虚拟…

    Centos6.5 中Nginx 部署基于IP 的虚拟主机 王尚2014.11.18 一.介绍虚拟主机 虚拟主机是使用特殊的软硬件技术,把一台真实的物理电脑主机 分割成多个逻辑存储单元,每个单元都没有 ...

  3. C#生成无重复的随机数

    大一学期末的时候做课程设计时遇到过生成无重复随机数的问题,今天自己也写出来了: static int[] Create_Value() { Random ran = new Random(); //生 ...

  4. java正则表达式提取地址中的ip和端口号

    由于我需要用到java正则表达式提取地址中的ip和端口号,所以我就写了一个demo,测试一下,下面是demo public class Test0810_1 { public static void ...

  5. Unity 粒子系统 特效 移除屏幕外面后再移回来 不会显示问题

    今天遇到的问题 勾选Particle System组件中的Sub Emitters属性 如图

  6. SSE图像算法优化系列十:简单的一个肤色检测算法的SSE优化。

    在很多场合需要高效率的肤色检测代码,本人常用的一个C++版本的代码如下所示: void IM_GetRoughSkinRegion(unsigned char *Src, unsigned char ...

  7. webpack的四个核心概念介绍

    前言 webpack 是一个当下最流行的前端资源的模块打包器.当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后 ...

  8. 项目管理利器---Maven

    Maven快速入门 maven介绍 maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建.报告和软件的项目管理工具.简单来说,maven可以帮助我们更有效的管理项目,也是一套 ...

  9. js对敏感词的判断

    先贴代码: //定义敏感字符 var forbiddenArray =['xx','<','>','黄色']; //定义函数 function forbiddenStr(str){ // ...

  10. css实现未知高度水平垂直居中

    页面设计中,经常需要实现元素的水平垂直居中,css实现的方法有很多(列如: margin: auto.position定位.css表达式calc().使用css预处理.table等都可以实现水平居中) ...