文章目录
- 相关引入
- c++中的转化机制
- const_cast
- reinterpret_cast
- static_cast
- dynamic_cast
- 其他
相关引入
C语言中的类型转换:
有相关性的类型之间才能转换:
非相关性不能转换:
c++中的转化机制
const_cast
去掉常量属性
指针相同, 值不相同, 本质是编译器对这个常属性的a做了优化, 因为他觉得常量不会被修改, 所以常量的地址类似宏替换, 不会从内存中去取
让他从内存中去取
用volatile修饰,任何时候都从内存中去取这个值
但是&a的打印是1, 还是跟编译器有关, 优化不同, 导致bug等情况
%p没有问题, 查看类型猜测是cout没有识别这个类型,同样的错误还有这个
了解即可
reinterpret_cast
用于有一定关联, 但意思不相似的类型:
static_cast
用于相近的类型转换:
提升截断本质就是隐式类型的转换
类型转换会产生临时变量
dynamic_cast
dynamic_cast用于父向子类型的转换(父子的指针转化或者是引用的转化, 对象不行)
向上转型: 子对象给父对象(赋值规则兼容, 不需要转换)
向下转型:父对象给子对象(使用dynamic_cast是安全的)
为什么会存在这个
父类的指针向下转可以指向父类也可以指向子类
?当父类被使用括号强转为子类时, 子类再取访问子类该有的属性, 而父类没有的属性时, 是访问额外的空间, 算是越界访问
所以使用dynamic_cast可以解决这个问题
dynamic_cast的使用, 父类必须要有虚函数, 否则不行
使用dynamic_cast可以从父类转化为子类, 也可以由子类转化为另一个子类, 前提是父类中存在虚函数,且只能转引用或者是指针
子类转化为父类是赋值规则的, 也不需要使用dynamic_cast
其他
RTTI 运行时类型识别(了解)
三种:
本章必须要了解的内容