本文主要简述在C++中四种类型转换的方式:static_cast、reniterpret_cast、const_cast和dynamic_cast.

  在介绍C++类型转换方式之前,我们先来看看C语言的类型转换.

  在C语言中,类型转换非常容易,我们想将int a转换为char a只需:(char)a即可,简单方便!

  简单方便的同时也存在一些缺陷:

  1.C语言中的类型转换太过于“笼统”,它可以使任意类型进行相互转换,而不同类型转换之间的差别是巨大的,但C语言却并没有做出明确的区分.

  2.C语言的类型转换不易于查找,庞大的代码中,我们想找某种特定的类型转换宛如大海捞针.

  因此,C++提供了四种类型转换的机制,分别为static_cast、reniterpret_cast、const_cast和dynamic_cast.

static_cast

  static_cast,从字面上来理解就是"静态转换".

  它是最常用的类型转换符,主要用于内置数据类型之间的相互转换,在编译期间进行处理.如:

int a = 10;
char b = (char)a; //c风格转换
char c = static_cast<char>(a); //c++风格转换

const_cast

  const_cast,从字面上来看就知道是"const类型转换"的.

  它可以将const变量转换为非const属性,或者,将非const变量转换为const变量.不能用于不同类型变量转换!!!如:

const int a = 10;
int b = (int)a; //C语言类型转换
int c = const_cast<int>(a); //C++类型转换

dynamic_cast

  dynamic_cast,从字面上来理解"动态类型转换".

  它用于派生类与基类之间的转换(主要将基类指针或引用转换为派生类指针或引用),转换时会进行类型安全检查.如:

Base *pBase = new Base();
Derive *pDerive = dynamic_cast<Derive*>(pBase);

  注:

  1.它不能进行不同类型变量的转换.

  2.dynamic_cast只能用于含有虚函数的类.

  3.dynamic_cast会先检查是否能转换成功,能成功则转换,不能则返回0. 

reinterpret_cast

  从字面上来理解reinterpret_cast,其含义为"重新解释转型".

  它与C语言中的强制转换具有相同功能,它可以用于内置类型的相互转换,也可以将内置类型转换为其他类型,其机理是"对二进制进行重新解释",不会改变之前的格式.

int a = 0x0018ff44;
int* b = static_cast<int*>(a); //编译失败!
int* c = reinterpret_cast<int*>(a); //编译成功!

【C++】类型转换简述:四种类型转换方式的说明及应用的更多相关文章

  1. c++ --> c++中四种类型转换方式

    c++中四种类型转换方式   c风格转换的格式很简单(TYPE)EXPRESSION,但是c风格的类型转换有不少缺点, 1)它可以在任意类型之间转换,比如你可以把一个指向const对象的指针转换成指向 ...

  2. 【转】C++四种类型转换方式

    C++四种类型转换方式 https://blog.csdn.net/lv_amelia/article/details/79483579 C风格的强制类型转换(Type Case)很简单,不管什么类型 ...

  3. 从零开始学C++之从C到C++(二):引用、内联函数inline、四种类型转换运算符

    一.引用 (1).引用是给一个变量起别名 定义引用的一般格式:类型  &引用名 = 变量名: 例如:int a=1; int  &b=a;// b是a的别名,因此a和b是同一个单元 注 ...

  4. C++语言中的四种类型转换

    1 引子 这篇笔记是根据StackOverflow上面的一个问题整理而成,主要内容是对C/C++当中四种类型转换操作进行举例说明.在之前其实对它们都是有所了解的,而随着自己在进行总结,并敲了一些测试示 ...

  5. 引用、数组引用与指针引用、内联函数inline、四种类型转换运算符

    一.引用 (1).引用是给一个变量起别名 定义引用的一般格式:类型  &引用名 = 变量名: 例如:int a=1;  int  &b=a;// b是a的别名,因此a和b是同一个单元 ...

  6. C++ 四种类型转换

    在写代码中经常会有很多的隐式类型转换或显式类型转换. 对于隐式的类型转换主要是放生在赋值的时候,讲变量赋值给不同类型的变量的时候就会发生类型转换,如果是宽化转换(即从占字节少的类型向占字节多的类型转换 ...

  7. [转]C++中四种类型转换符的总结

    C++中四种类型转换符的总结 一.reinterpret_cast用法:reinpreter_cast<type-id> (expression)    reinterpret_cast操 ...

  8. C++中四种类型转换以及const_cast是否能改变常量的问题

    we have four specific casting operators:dynamic_cast, reinterpret_cast, static_cast and const_cast. ...

  9. 读书笔记——spring cloud 中 HystrixCommand的四种执行方式简述

    读了<Spring Cloud 微服务实战>第151-154页, 总结如下: Hystrix存在两种Command,一种是HystrixCommand,另一种是HystrixObserva ...

随机推荐

  1. web框架和Django框架的初识

    1,web框架的原理 1.1>c/s架构和b/s架构 1>c/s客户端模式 2>B/S浏览器模式-----web开发(web开发开的是B/S架构) 1.2>web开发的本质 1 ...

  2. C项目实践--贪吃蛇(1)

    1.功能需求分析 1.1主要功能 i.游戏欢迎界面 ii.游戏执行功能,包括计算得分 iii.游戏结束界面 1.2游戏基本规则 游戏开始时蛇的长度是4个单位,并且按照当前方向不停地移动.移动范围是CO ...

  3. The type exists in both DLLs

    2>C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\c0b37647\aaceda91\Ap ...

  4. YTU 2556: 空洞

    2556: 空洞 时间限制: 1 Sec  内存限制: 128 MB 提交: 24  解决: 17 题目描述 春天来了,单身的霞姐越发地空虚寂寞,于是她想到一个办法,她认 为只要把英文字母上的洞都涂满 ...

  5. UITableview控件简单介绍

    注意点:数据源方法只能在控制器里设置 一.基本介绍 在众多移动应⽤用中,能看到各式各样的表格数据 . 在iOS中,要实现表格数据展示,最常用的做法就是使用UITableView,UITableView ...

  6. 机器学习: KNN--python

    今天介绍机器学习中比较常见的一种分类算法,K-NN,NN 就是 Nearest Neighbors, 也就是最近邻的意思,这是一种有监督的分类算法,给定一个 test sample, 计算这个 tes ...

  7. Linux设备模型 (1)

    随着计算机的周边外设越来越丰富,设备管理已经成为现代操作系统的一项重要任务,这对于Linux来说也是同样的情况.每次Linux内核新版本的发布,都会伴随着一批设备驱动进入内核.在Linux内核里,驱动 ...

  8. 关于spring MVC中获取客户端的IP地址

    1. 引入HttpServletRequest @Autowired private HttpServletRequest request; 2. 获取IP地址 private static Stri ...

  9. svn报错:privious operation has not finshed;run 'cleanup' if it was interrupted

    在更新svn的过程中,可能中途会取消,取消之后再次更新时可能提示,如下图: 下载sqlite3工具,进入此下载地址:https://www.sqlite.org/download.html 将sqli ...

  10. bzoj 4320: ShangHai2006 Homework【分块】

    按根号300000=m分情况讨论 查询是,当x小于等于m,那么可以暴力记录直接出解:否则,用分块维护区间值,查询的时候以x为步长跳根号m次取最小值即可 还有一种并查集方法,来自https://www. ...