转型+继承链
2. 转型 + 继承链
有如下代码:
1 | class A |
A. L 1语句编译失败,L 2语句编译通过 B. L1语句编译通过,L2语句编译失败 C. L 1,L 2都编译失败 D. L 1,L 2都编译通过
四种类型转换符:
- static_cast:用于良性转换,一般不会导致意外发生,风险很低。
- const_cast:用于 const 与非 const、volatile 与非 volatile 之间的转换。
- reinterpret_cast:高度危险的转换,仅是对二进制位的重新解释,不会借助已有的转换规则对数据进行调整,但可实现最灵活的 C++ 类型转换。
- dynamic_cast:借助 RTTI,用于类型安全的向下转型(Downcasting)。
向下转型:
当使用
dynamic_cast
对指针进行类型转换时,程序会先找到该指针指向的对象,再根据对象找到当前类(指针指向的对象所属的类)的类型信息(type_info),并从此节点开始沿着继承链向上遍历,如果找到了要转化的目标类型,那么说明这种转换是安全的,就能够转换成功,如果没有找到要转换的目标类型,那么说明这种转换存在较大的风险,就不能转换。故而L1编译能够通过,而L2无法通过编译。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 极简!
评论