C++ 的类型转换
C 语言的类型转换有隐式类型转换和强制类型转换
但是这个转换的可视性太差了,有时很难意识到发生了类型转换,最终导致运行结果和预期不符
所以在 C++ 中引出了四种命名的强制类型转换操作符,来加强类型转换的可视性
static_cast、reinterpret_cast、const_cast、dynamic_cast
四种命名的强制类型转换操作符
static_cast
static_cast用于非多态类型的转换(静态转换),编译器隐式执行的任何类型转换都可用,但是不能用于两个不相关的类型进行转换
reinterpret_cast
reinterpret_cast用于不同类型之间的转换
const_cast
const_cast的作用就是删除变量的 const 属性
但是要注意:
在用
p2去改变n的值的时候,编译器可能会优化掉对n内存的访问操作,比如:用p2去改了n的值,但是程序运行时还是原来那个值这个时候就需要
volatile去让编译器每次都访问内存里的n
dynamic_cast
dynamic_cast用于将一个父类对象的指针/引用转换为子类对象的指针或引用 (动态转换)
dynamic_cast只能用于父类含有虚函数的类
dynamic_cast会检查是否能转换成功,能成功的话就会转换,不能成功的话会返回空指针
如果是子类转换成父类的话,不需要
dynamic_cast,用static_cast就行了如果是父类转换成子类的话,用
dynamic_cast,这是安全的,但不一定能转换成功
RTTI(这个了解一下就行了)
这个的意思就是进行运行时的类型识别
C++支持 RTTI 的方式有三种:
typeid 运算符
dynamic_cast 运算符
decltype
C++ 的 IO 流
istream是输入东西ostream是输出东西
iostream是输入输出东西
C 语言的 IO 流里面主要用到的有
fprintf,fscanf,printf,sprintf,


