标签:exp ddd cpp 引用 不同 不同的 int 方便 express
int m = 3 + 45.6; //48.6000000000 截断为48,将小数部分进行截断
//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风格的类型转换,但提供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.指针转换为整型
标签:exp ddd cpp 引用 不同 不同的 int 方便 express
原文地址:https://www.cnblogs.com/sxgloverr1314/p/11517500.html