1、新型的类型转换:
1、C语言的强制类型转换。
1、typedef void (PF) (int);
2、struct Point{
int x;
int y;
};
3、int v = 0x1234;
4、PF *pf = (PF *)v;
5、char c = (char )v;
6、Point *p = (Point *)v;
2、C方式强制类型转换存在的问题。
1、过于粗暴,任意类型之间都可以进行类型转换。编译器很难判断正确性。
2、难于定位,在源代码中很难定位到强制类型转换到语句。
3、强制类型转换在实际工程中是很难避免的,如何才能进行有效安全的强制类型转换?那许需要新型的强制类型转换方式。
3、新式强制类型转换。
1、C++将强制类型转换分为四种不同的类型。(牢记场合)
1、static_cast
2、const_cast
3、dynamic_cast
4、reinterpret_cast
用法:xxx_cast(Expession)
1、static_cast强制类型转换。
1、用于基本类型转换。
2、不能用于基本类型指针之间的类型转换。
3、用于有继承关系,类对象之间的转换,类指针之间的转换。
2、const_cast强制类型转换。
1、用于去掉变量的只读属性。
2、强制转换的目标类型必须是指针或者引用。
3、reinterpret
1、用于指针类型之间的转换。
2、用于整形和指针类型之间的转换。
4、dynamic_cast
1、用于继承关系的类指针之间的相互转换。
2、用于交叉关系之间的类指针之间的相互转换。
3、具有类型检查功能。
4、需要虚函数的支持。
小结:
1、C方式的强制转换过于粗暴。
2、潜在问题不易发现,不易在代码中定位。
3、新式类型转换以C++的关键字的方式出现。
4、编译器能够帮助检查潜在的问题。
5、非常方便的在代码中定位。
6、支持动态类型识别(dynamic_cast)。