c++中4个与类型转换相关的关键字总结
C++中,四个与类型转换相关的关键字:static_cast、const_cast、reinterpret_cast、dynamic_cast。
1.static_cast------运算符完成相关类型之间的转换**
特点:静态转换,在编译处理期间。
使用场景:主要用于C++中内置的基本数据类型之间的转换,但是没有运行时类型的检测来保证转换的安全性。如在同一类层次结构中的一个指针类型到另一个指针类型,整型到枚举类型,或者浮点型到整型等。
例: 1, int m=10;
double n=static_cast < double> m;
2, void* p = &d;
double * q=static_cast < double* > (p);
注意:
- 用于基类和子类之间的指针或引用之间的转换,这种转换把子类的指针或引用转换为基类表示是安全的;进行下行转换,把积累的指针或引用转换为子类表示时,由于没有进行动态类型检测,所以是不安全的。
- 把void类型的指针转换成目标类型的指针(不安全)。
- 不能用于两个不相关的类型转换。
- 不能把const对象转换成非const对象。
2.const_cast用来移除或添加变量的const。
特点:去常转换,编译时执行。
应用场合:const_cast操作不能在不同的种类间转换。相反,它仅仅把它作用的表达式转换成常量。它可以使一个本来不是const类型的数据转换成const类型的,或者把const属性去掉。
例: const char *pc;
char *p = const_cast<char*>(pc);
3.reinterpret_cast------处理互不相关类型之间的转换
特点: 重解释类型转换
应用场合:它有着和c风格强制类型转换同样的功能;它可以转化任何的内置数据类型为其他的类型,同时它也可以把任何类型
的指针转化为其他的类型;它的机理是对二进制进行重新的解释,不会改变原来的格式。
如从整型到指针,一种类型的指针到另一种类型的指针等
例: int a=10;
double* b=reinterpret_cast<double*>(a); //b的转换结果为0x0000000a
4.dynamic_cast------处理基类型到派生类型的转换(这个说法不是很准确,为了好理解先这么写)
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个与类型转换相关的关键字总结相关推荐
- C++中,有哪4种与类型转换相关的关键字?各有什么特点?应该在什么场合下使用?
C++中,四个与类型转换相关的关键字:static_cast.const_cast.reinterpret_cast.dynamic_cast. 一.static_cast 特点:静态转换,在编译处理 ...
- c++有哪四个类型转换相关的关键字
[面试题]c++有哪四个类型转换相关的关键字? 在C/C++语言中用 (type) value(在C++还可以采用type(value))来进行显式类型转换(explicit type convers ...
- 深入理解C++中五种强制类型转换的使用场景
深入理解C++中五种强制类型转换的使用场景 1.C风格的强制类型转换 2.C++风格的强制类型转换 2.1.static_cast 2.1.1.用于基本内置数据类型之间的转换 2.1.2.用于指针之间 ...
- python列表方法语句_Python中列表和元组的相关语句和方法讲解
列表(list): 首先,列表属于序列,那么序列类型可用如下内建函数-- list(iter):把可迭代对象转换为列表. str(obj):把obj对象转换为字符串,即用字符串来表示这个对象. tup ...
- 计算机在中职教育中的运用论文,中职计算机教育的相关论文(2)
中职计算机教育的相关论文篇二 <中职计算机教育中实践能力的培养> [摘要]本文以中职计算机教育中实践能力的培养为题展开论述.首先,分析了当前在中职计算机实践能力培养方面存在的问题.然后,结 ...
- python类型转换-Python中如何进行数据类型转换?
原标题:Python中如何进行数据类型转换? 这一次要讲的是Python中的数据类型转换,Python中的数据类型转换是什么?就是将数据由当前类型变化为其他类型的操作就是数据类型转换.数据类型转换分为 ...
- android中关于手机屏幕的相关操作(获取屏幕的宽高等操作)
这里总结下android中关于手机屏幕的相关操作: 1.获取屏幕的分辨率(因为android中处理显示的时候,需要根据屏幕分辨率的不同才去不同的布局或显示不同的素材) <uses-sdk and ...
- Python之pandas:pandas中常见的数据类型转换四大方法以及遇到的一些坑之详细攻略
Python之pandas:pandas中常见的数据类型转换四大方法以及遇到的一些坑之详细攻略 目录 pandas中常见的数据类型转换方法 T1.读取时直接转换数据类型 T2.采用astype
- C++与类型转换相关的四个关键字
为什么80%的码农都做不了架构师?>>> C++与类型转换相关的四个关键字有:const_cast.static_cast.dynamic_cast.reinterpret_c ...
最新文章
- css对称旋转,CSS3 transform平面旋转
- Android多媒体扫描过程(Android Media Scanner Prosess)
- 数据库-数据库设计-5个
- (运维日志)在win7安装Oracle并部署Oracle数据库
- 如何命令行远程连接centos_如何使用windows远程控制centOS桌面
- 阿里技术面:ReadWriteLock读写之间互斥吗?
- tf.shape()和tf.reshape()
- Android SEAndroid
- 标准C程序设计七---121
- mysql-mmm+amoeba+keepalived实现mysql高可用和读写分离(二)
- C#编程之SqlHelper
- java自动生成一年中工作日和休息日(公休日及假期国家法定假日)
- 创建一维数组,存储班级中10位同学的年龄信息,并求出班级同学的平均年龄。找出班级中的最小年龄和最大年龄。(冒泡排序)
- openairinterface5g基站老版eNB部署
- java发送带图片的邮件_java项目如何发送带图片的邮件
- Vue项目引入animated
- android 解决微信登录白屏样式问题
- 怎么把word压缩到最小
- 智能微电网的核心技术
- 条件概率的本质是样本空间的缩减