扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
C++的数据类型转换可分为隐式类型转换和显式类型转换
成都创新互联主要从事网站制作、网站设计、网页设计、企业做网站、公司建网站等业务。立足成都服务监利,10多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:189820811081、隐式类型转换
隐式类型转换用于内置数据类型的转换。编译时编译器对数据类型进行转换。
例如:
int nTemp = 36;
float fTemp = nTemp;
隐式类型转换也可以通过表达式、函数形参、函数返回值的方式进行。
2、显式数据类型转换
2.1 强制类型转换
(Type)expr
例如:
float ftemp;
int ntemp = 36;
ftemp = (float)ntemp;
强制类型转换使用于C编译器。
2.2 标准C++的类型转换
标准c++使用新的类型转换符static_cast、dynamic_cast、reinterpret_cast、const_cast对类型进行转换。
1)static_cast
static_cast
static_cast相当于传统的C语言里的强制转换,该运算符把expression转换为new_type类型,用来强迫隐式转换如non-const对象转为const对象,编译时检查,用于非多态的转换,可以转换指针及其他,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法:
①用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换。
进行上行转换(把派生类的指针或引用转换成基类表示)是安全的;
进行下行转换(把基类指针或引用转换成派生类表示)时,由于没有动态类型检查,所以是不安全的。
②用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。
③把空指针转换成目标类型的空指针。
④把任何类型的表达式转换成void类型。
注意:static_cast不能转换掉expression的const、volatile、或者__unaligned属性
char a = 'a';
int b = static_cast
double *c = new double;
void *d = static_cast
int e = 10;
const int f = static_cast
const int g = 20;
int *h = static_cast
2)dynamic_cast
dynamic_cast
转换方式:
dynamic_cast
type必须是一个类类型且必须是一个有效的指针
dynamic_cast
type必须是一个类类型且必须是一个左值
dynamic_cast
type必须是一个类类型且必须是一个右值
e的类型必须符合以下三个条件中的任何一个:
① e的类型是目标类型type的公有派生类
② e的类型是目标type的共有基类
③ e的类型就是目标type的类型。
如果一条dynamic_cast语句的转换目标是指针类型并且失败了,则结果为0。如果转换目标是引用类型并且失败了,则dynamic_cast运算符将抛出一个std::bad_cast异常(该异常定义在typeinfo标准库头文件中)。e也可以是一个空指针,结果是所需类型的空指针。
dynamic_cast主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换(cross cast)。
在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的;在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。dynamic_cast是唯一无法由旧式语法执行的动作,也是唯一可能耗费重大运行成本的转型动作。
指针转换
Derived *dp = dynamic_cast
引用转换
const Derived &d = dynamic_cast
3)reinterpret_cast
reinterpret_cast
reinterpret_cast用于任意类型的转换,即reinterpret_cast运算符允许将任意指针转换到其他指针类型,也允许做任意整数类型和任意指针类型之间的转换。转换时,执行的是逐个比特复制的操作。reinterpret中文意为“重新解释; 重新诠释;”。
type-id 必须是一个指针、引用、算术类型、函数指针或者成员指针。
reinterpret_cast可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针。我们必须知道指针的类型,然后把指针转换成整数和还原到原来的类型。否则这样的转换是很危险的。类型转换的安全性要程序员自己来保证。
reinterpret_cast是为了映射到一个完全不同类型的意思,这个关键词在我们需要把类型映射回原有类型时用到它。我们映射到的类型仅仅是为了故弄玄虚和其他目的,这是所有映射中最危险的。
reinterpret_cast使用注意事项:
从本质上说所有这些转换都是不安全的,依赖于实现的,或两者都是, reinterpret也不例外(存在安全性)。这种安全性只能由程序员自己来保证。
4)const_cast
const_cast是一个基于C语言编程开发的运算方法,其主要作用是:修改类型的const或volatile属性。使用该运算方法可以返回一个指向非常量的指针(或引用)指向b1,就可以通过该指针(或引用)对它的数据成员任意改变。
const_cast
该运算符用来修改类型的const或volatile属性。除了const 或volatile修饰之外, type_id和expression的类型是一样的。
①、常量指针被转化成非常量的指针,并且仍然指向原来的对象;
②、常量引用被转换成非常量的引用,并且仍然指向原来的对象;
③、const_cast一般用于修改底指针。如const char *p形式。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流