【C++】类型转换简述:四种类型转换方式的说明及应用
本文主要简述在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++】类型转换简述:四种类型转换方式的说明及应用的更多相关文章
- c++ --> c++中四种类型转换方式
c++中四种类型转换方式 c风格转换的格式很简单(TYPE)EXPRESSION,但是c风格的类型转换有不少缺点, 1)它可以在任意类型之间转换,比如你可以把一个指向const对象的指针转换成指向 ...
- 【转】C++四种类型转换方式
C++四种类型转换方式 https://blog.csdn.net/lv_amelia/article/details/79483579 C风格的强制类型转换(Type Case)很简单,不管什么类型 ...
- 从零开始学C++之从C到C++(二):引用、内联函数inline、四种类型转换运算符
一.引用 (1).引用是给一个变量起别名 定义引用的一般格式:类型 &引用名 = 变量名: 例如:int a=1; int &b=a;// b是a的别名,因此a和b是同一个单元 注 ...
- C++语言中的四种类型转换
1 引子 这篇笔记是根据StackOverflow上面的一个问题整理而成,主要内容是对C/C++当中四种类型转换操作进行举例说明.在之前其实对它们都是有所了解的,而随着自己在进行总结,并敲了一些测试示 ...
- 引用、数组引用与指针引用、内联函数inline、四种类型转换运算符
一.引用 (1).引用是给一个变量起别名 定义引用的一般格式:类型 &引用名 = 变量名: 例如:int a=1; int &b=a;// b是a的别名,因此a和b是同一个单元 ...
- C++ 四种类型转换
在写代码中经常会有很多的隐式类型转换或显式类型转换. 对于隐式的类型转换主要是放生在赋值的时候,讲变量赋值给不同类型的变量的时候就会发生类型转换,如果是宽化转换(即从占字节少的类型向占字节多的类型转换 ...
- [转]C++中四种类型转换符的总结
C++中四种类型转换符的总结 一.reinterpret_cast用法:reinpreter_cast<type-id> (expression) reinterpret_cast操 ...
- C++中四种类型转换以及const_cast是否能改变常量的问题
we have four specific casting operators:dynamic_cast, reinterpret_cast, static_cast and const_cast. ...
- 读书笔记——spring cloud 中 HystrixCommand的四种执行方式简述
读了<Spring Cloud 微服务实战>第151-154页, 总结如下: Hystrix存在两种Command,一种是HystrixCommand,另一种是HystrixObserva ...
随机推荐
- Codeforces 440 D. Berland Federalization 树形DP,记录DP
题目链接:http://codeforces.com/contest/440/problem/D D. Berland Federalization Recently, Berland faces ...
- SSH三大框架整合配置详细步骤(1)
配置Struts2.0 3.1 基础配置 1)引入Struts必需的五个jar包.下载struts-2.1.6-all.zip解压后,struts-2.1.6\lib目录下是struts所有的相关ja ...
- 设计模式-(6)适配器 (swift版)
用来解决接口适配问题的三种模式:适配器模式,桥接模式,外观模式. 一,概念 适配器模式,将一个类的结构转换成用户希望的另一个接口,使得原本接口不兼容的类能在一起工作.换句话说,适配器模式就是链接两种不 ...
- Android无法自动创建USB打印机节点/dev/usb/lp0【转】
本文转载自:http://blog.csdn.net/u013686019/article/details/50165059 Android: 4.4.4 一.问题分析 当把USB打印机插入Andro ...
- 使用C#开发HTTP服务器系列之访问主页
各位朋友大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是http://qinyuanpei.com.在这个系列文章的第一篇中,我们着重认识和了解了HTTP协议,并在此基础上实现了一个可交互的W ...
- 并不对劲的bzoj4199: [Noi2015]品酒大会
传送门-> 又称普及大会. 这题没什么好说的……后缀自动机裸题……并不对劲的人太菜了,之前照着标程逐行比对才过了这道题,前几天刚刚把这题一遍写对…… 这题的输出和某两点相同后缀的长度有关,那么把 ...
- Servlet单例非安全解析
Servlet容器默认是采用单实例多线程的方式处理多个请求 Servlet容器<Web容器<应用服务器?apache<tomcat<websphere Servlet不是线程安 ...
- bzoj4196 [Noi2015]软件包管理器——树链剖分
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4196 树链剖分. 代码如下: #include<iostream> #inclu ...
- Gerrit+apache+H2数据库简单安装配置及建库流程
Gerrit 是一个基于 Web 的代码评审和项目管理的工具,面向基于 Git 版本控制系统的项目.因此需要Apache.Mysql.GIT等相关软件的支持 系统配置: 新装的UBANTU LINUX ...
- 获取http请求的响应状态
import urllib.request url="http://www.baidu.com" #返回一个对象 response=urllib.request.urlopen(u ...