z最近晕乎乎的,这部分的内容看得很不明白,只能理解非常浅显,我要加油了 !
参考这篇博客:https://blog.csdn.net/ydar95/article/details/69822540
- 去const属性用const_cast
- 基本类型转换用static_cast
- 多态类之间的类型转换用daynamic_cast
- 不同类型的指针类型转换用reinterpreter_cast
C风格
TypeName b = (TypeName)a;
C++风格
1. const_cast
去掉类型的 const、volatile 属性
1 |
|
2. static_cast
类似于C风格的强制转换
派生类和子类之间转换
- 派生类的指针或引用转换成基类是安全的
- 基类指针或引用转换成派生类是不安全的
基本数据类型之间的转换,enum, struct, int, char, float 之间的转换
static_cast不能去掉类型的const、volitale属性 (用const_cast)
c++ 的任何的隐式转换都是使用 static_cast 来实现
1 | /* 常规用法 */ |
3. dynamic_cast
一般是用在基类和派生类的转换上,也与编译器的属性设置有关
在进行下行转换时,dynamic_cast具有类型检查的功能,比 static_cast更安全
1 |
|
运行时类型检查需要运行时类型信息,而这个信息存储在类的虚函数表中,只有定义了虚函数的类才有虚函数表
当一个类中拥有至少一个虚函数,那么编译器就会构建出一个虚函数表,来指示这些函数的地址,假如继承该类的子类定义并实现了一个同名并具有同样函数签名的方法重写了基类中的方法,那么虚函数表会将该函数指向新的地址。此时多态性就体现出来了
4. reinterpret_cast
无关类型转换,将指针转换为其它指针类型、将数字转换为指针或将指针转换为数字
1 | int main(int argc, const char * argv[]) { |