《C++primer》第4章之类型转换

何时发生隐式转换:

算术转换

运算符的对象将转换成最宽的类型,比如一个运算对象的类型是long double,那么无论另外一个运算对象的类型是什么都会转换成long double

整型提升

整型提升负责把小整数类型转换成较大的整数类型(先int,装不下就unsigned int ,再是unsigned long,long long,unsigned long long )

无符号类型的运算对象

如果一个运算对象是无符号类型,且不小于另一个运算对象(有符号类型),那么有符号的运算对象会转换成无符号的对象,

如果有符号的运算对象此时是负数,则转换后的值 = 它的值 + 无符号类型最大值

若带符号大于无符号,则转换结果依赖于机器:如果无符号类型的所有值都能存在该带符号类型中,则无符号对象转换成有符号对象,如果不能,则带符号对象转换成无符号类型

 

其它隐式类型转换

数组转换成指针

mark

指针转换

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

指向任意非常量的指针可以转换成void*

指向任意对象的指针可以转换成const void*

转换成bool类型

如果指针或算术类型的值为0,转换结果为false,否则为true

转换成常量

允许将指向非常量类型的指针转换成指向相应的常量类型指针,反过来不行

类类型的转换

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

 

显式转换

强制类型转换的形式:

type为转换的目标类型,如果type是引用类型,则结果是左值

cast-name是static_cast、dynamic_cast、const_cast 和 reinterpret_cast 中的一种

static_cast

任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast

dynamic_cast

将一个基类对象指针(或引用)cast到继承类指针

const_cast

只能改变运算对象的底层const

reinterpret_cast

为运算对象的位模式提供较低层次上的重新解释

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值