C++中的类型转换规则

<分析>:任何一个操作符在运算之前其操作数的类型必须一致,如果不一致必须进行类型转换,对不同类型之间的转换规则总结如下:

(1)整型提升:

  在算术运算中,对于所有比int型小的整型,包括char,signed char,unsigned char,short,unsigned short,如果该类型所有可能值都包含在int内,它们就被提升为int,否则将被提升为unsigned int。也就是在计算前不管算式中有无int,都会被提升为int。

(2)如果算式中存在同一类型的有符号和无符号的表达式,signed的类型被转换为unsigned。

(3)类型转换是确保精度优先的条件下进行的(long double>double>float>unsigned long>long>unsigned int>int)。

(4)任何数据类型的指针都可以转换为void*类型,整数0可以转换为任何指针类型。

(5)枚举对象或者枚举成员转换为整型时至少提升为int型。

(6)非const对象可以初始化const对象,同时可以将非const类型对象的地址转化为执行const类型的指针。

(7)强制类型转换:

   ①daynamic_cast:运行时识别指针或者引用所指向的对象。实现类继承对象之间的转换,可以将基类类型引用或者指针安全的转换为派生类引用或者指针;

   ②const_cast:转换掉表达式中的const性质;

   ③static_cast:隐式执行的任何类型转换都可以由static_cast显示完成,可以用这个转换找回存放在void指针中的值;

   ④reinterpret_cast,实现本来不能转换的类进行转换,是不安全的数据类型转换;

(8)类类型转换:

   ①类类型转换前后都可以有标准类型转换;

   ②一个表达式中只能有一个类类型转换;

(9)新式强制类型转换的优点:

   ①很容易在代码中被辨认出来,因而得以简化“找出类型系统的哪个地点被破坏”的过程。

   ②各转型动作目标越狭窄,编译器越能诊断出错误的运用。

   ③旧的类型转换任何类型都可以转换,但是不安全。

(10)如果可以,尽量避免转型,因为像dynamic_cast这样的转型很浪费时间,如果必须转换,尽量把转型放在函数里,客户可以调用函数,而不是将转型放在自己的代码里:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值