码迷,mamicode.com
首页 > 编程语言 > 详细

c++ 之 类型转换

时间:2019-09-13 21:53:06      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:exp   ddd   cpp   引用   不同   不同的   int   方便   express   

一、隐式类型转换

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++ 之 类型转换

标签:exp   ddd   cpp   引用   不同   不同的   int   方便   express   

原文地址:https://www.cnblogs.com/sxgloverr1314/p/11517500.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!