C++语言
-
隐式类型转换、
- 系统自动进行、
-
显示类型转换、(强制类型转换)
-
C语言中的两种强制类型转换、
-
int a=5%(int)3.2
-
int a = 5% int (3.2)
-
以上两个方法均可以将浮点型强制转换 为int型、但是会丢失精度、
-
C++中有四种转换强制转换、目的是提供更丰富的含义和功能、
-
static_cast、
-
静态转换、编译时进行类型转换检查、
-
相关类型风格转换、
-
double a = 2.32; int b = (int)a;//C语言的转换方式、 int c = static_cast<int>(a);//C ++的强制转换
-
整型转实性、
-
子类转父类、
-
void*(无类型指针、可以指向任何指针类型)与其他类型指针、类型之间转换、
-
-
dynamic_cast、
- 常用于运行时类型识别和检查、主要用来父类型于子类型之间转换的、(父类型指针指向子类型转)、
- 这四种强制类型转换中唯一在运行时进行转换的、其余均是在编译时转换、
-
const_cast、
-
去除指针和const属性、将const性质强制转换掉(去除掉)、
-
编译时进行类型转换、
-
const int a = 10; const int* b = &a; int* c = const_cast<int*>(b); *c = 20;//写值行为、属于未定义行为、结果会不确定、 cout << a << endl; cout << *b << endl;
-
功能单一、只能去除指针及其const属性、
-
-
reinterpret_cast、
-
重新解释、将操作内容解释为另一种不同的类型、将操作数的类型转换、
-
处理无关类型的转换、两个转换类型之间没有任何关系、
-
常用于、将一个整形(地址)转成指针、一种类型的指针转换成另一种类型的指针、按照转换后的类型重新解释内存内的内容、
-
int a = 6; int* b = &a; int* c = reinterpret_cast<int*>(b); char* d = reinterpret_cast<char*>(b);
-
-
可以将2字节转换为4字节或者8字节、当然也可以让8字节或者其它字节转换为别的字节、8转2或4均可、
-
-
以上四个均成为命名的强制类型转换、
-
通用形式、
-
强制类型转换名(即以上4个命名)<转换目标类型>(要转换的值);
- 类型转换就是为了让编译器不报错而存在的、
-
-
-
总结、
- 类型转换少用因为会干扰系统的类型检查、
-