C++四种转换总结
C++四种类型包括:static_cast,dynamic_cast,const_cast,reinterpret_cast.
1.Static_cast
主要用于父子类之间的转换,不保证类型安全。
a. 进行上行转换是安全的,即子类指针转换为基类指针,属于缩小内存访问,所以是安全的。
b. 进行下行转换即父类指针转换为子类指针,由于没有做运行时检查,是不安全的,主要还是子类的访问空间是大于父类,所以多出来的访问空间不保证安全。
基本类型转换
int转char,int转num等,同样是内存的扩大访问,不能保证安全。
空指针转换为目标类型指针
任意类型转换为void类型
2.dynamic_cast
动态转换有限制条件:
a. 适用于指针或引用
b. 转换类必须含有虚函数
dynamic_cast转换会检查转换成功与否,失败返回0,如果转换的是引用,则会抛出bad_cast异常。
3.const_cast
主要用于去除对象的常量性属性。const_cast转换符是用来移除变量的const或volatile限定符
4.reinterpret_cast
主要用来转换两种无关类型。它会产生一个新的值,这个值会有与原始参数(expressoin)有完全相同的比特位。
使用场景:
- 从指针类型到一个足够大的整数类型
- 从整数类型或者枚举类型到指针类型
- 从一个指向函数的指针到另一个不同类型的指向函数的指针
- 从一个指向对象的指针到另一个不同类型的指向对象的指针
- 从一个指向类函数成员的指针到另一个指向不同类型的函数成员的指针
- 从一个指向类数据成员的指针到另一个指向不同类型的数据成员的指针
reinterpret_cast的转换所受限制不多,可以随意转换,但是是最不建议使用的转换方式。
笑语欢歌水云间, 谈古论今郁作烟。 人存一世数十载, 生则壮志冲九天!