c++ 之 类型转换
Posted sxgloverr1314
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ 之 类型转换相关的知识,希望对你有一定的参考价值。
一、隐式类型转换
int m = 3 + 45.6; //48.6000000000 截断为48,将小数部分进行截断
二、C风格 显式类型转换(强制类型转换)
//int k = 5 % 3.2; 编译器报错
int k = 5 %(int)3.2; //C语言风格的强制类型转换,但需要程序员来保证数据正确可转
int k = 5 % int(3.2); //函数风格的强制类型转换(C语言风格的强制类型转换中的一种)
int k = 5 %(int)"dddd"; //C语言风格的强制类型转换,但结果肯定错误
//所以C语言风格的强制类型转换是一种不安全的类型强制转换
三、C++类型转换
//C++出来支持C风格的类型转换,但提供4中C++的强制类型转换,分别用于不同的目的
//目的是为了提供丰富的含义和功能,更好的类型检查机制,方便代码的书写与维护
1.static_cast
2.dynamic_cast
3.const_cast
4.reinterpret_cast
这四种强制类型转换被称为 "命名的强制类型转换"
1.static_cast:静态转换(可以理解为C风格的强制类型转换,但编译器会检查其合法性)
//通用形式
//强制类型转换名<type>(express);1.static_cast:静态转换(可以理解为C风格的强制类型转
换,但编译器会检查其合法性)
可用于
a.相关类型的转换(如浮点型转整型)
int i = static_cast<int> 100.0;
b.子类转换为父类(继承关系)
c.void *指针与其他指针之间的转换(被强制转换的是void *类型指针)
不可用于
a.一般不能用于不同类型指针之间的转换
2.dynamic_cast:主要应用于 运行时类型识别与检查。
主要用来父类型和子类型之间的转换用(将父类型指针指向子类型对象)
3.const_cast:去除指针或引用的const属性(编译时进行类型转换)不能进行不同类型之间的转换
4.reinterpret_cast:重新解释(处理无关类型的转换)可以乱转,安全性较差
常用于如下两种类型的转换
a.将整型转换为指针
b.将一种类型的指针转换为另一种类型的指针。
c.指针转换为整型
四、总结
1.强制类型转换均不建议使用,会抑制编译器报错
2. reinterpret_cast非常危险,const_cast使用则意味着设计缺陷
3. 如果实在需要进行强制类型转换,则要使用C++风格的强制类型转换
4. reinterpret_cast只要合乎规则的使用,则很好用
以上是关于c++ 之 类型转换的主要内容,如果未能解决你的问题,请参考以下文章