C++中的类型转换

类型转换

对象的类型定义了对象能包含的数据(存储空间大小、存储方式、数值范围等)和能参与的运算。当在程序的某处我们使用的类型和应当取的类型不一致时就需要 进行类型转换, 前提是两种类型是相关联的。类型的转换分为隐式转换和显式转换。

隐式转换

隐式转换程序自动完成的,无需我们介入。隐式转换常发生的场合:
1)比int类型小的整型值首先提升为较大的整数类型;
2)在条件中,非布尔值会转换成布尔类型;
3)初始化过程中,初始值会转换为变量的类型
4)在赋值语句中,右侧的运算对象会转换成左侧的运算对象;
5)如果算数运算或者关系运算的运算对象有多种类型,需要转换成同一种类型;
6)函数调用时也会发生类型转换。
算术转换 

整型提升:负责把小整数类型转换为较大的整数类型。对于比int小的整型来说,只要他们所有可能的值在int范围内就会提升成int型,否则提升成unsigned int型。 较大的char类型会被提升成最接近的整型。针对无符号类型的转换需要依赖机器中各个整数类型的相对大小。   

指针转换 

1)在大多数数组的表达中,数组中自动转换成只想数组首元素的指针。

2)常量整数型0 或 字面值 nullptr 能转换成任意指针类型。

3)指向任意非常量的指针能转换为成void *。

4)指向任意对象的指针能转换成const void *。

5)允许将指向非常量类型的指针转换成相应的常量类型的指针。

布尔值转换
存在一种算数类型或者指针类型转换为布尔类型的自动转换机制。
类类型转换                                                                                                                                                                                                                                                                     

类类型能定义有编译器自动执行的转换,不过编译器每次只能执行一种类类型的转换。

显式转换

命名的强制类型转换  

cast-name<type> (expression)

其中type是转换的目标类型而expression是要转换的值。如果type是引用类型,则结果是左值。cast-name是static_cast,dynamic_cast,const_cast,reinterpret_cast中的一种。

static_cast:  任何具有明确定义的类型,只要不要底层const,均可以使用static_cast转换;
const_cast:只能改变运算对象的底层const;
reinterpret_cast:通常为运算对象的位模式提供较低层次上的重新解释。
旧式的强制类型转换                                                                                                                                                                                                                                                  

<type>(expr);//函数形式的强制类型转换

(type) expr;//C语言风格的强制类型转换

                                                                                                                                                                                                                                                                    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值