C++四种类型转换
C++类型转换通常有三种不同的形式。可以分为“旧式转型”和“新式转型”。
旧式转型
C-style转型:
(1)(T)expression //将expression转型为T
函数风格: (2)T(expression) //
将expression转型为T
新式转型:
C++提供了四种新式转型,为什么还要引入这四种新式转换呢?原因:第一:它们很容易在代码中被辨识出来(不论是人工辨识还是工具),因而得以简化“找出类型系统在哪个地方被破坏”的过程。第二:各转型动作的目标愈窄化,编译器愈可能诊断出错误的运行。
- const_cast:通常被用来将对象的常量性转除。它也是唯一有此能力的C++_style转型操作符。
- static_cast:主要用于C++内置数据类型之间的转换,但是没有运行时类型的检测来保证转换的安全性,用于基类和子类之间的指针或引用的转换。这种转换把子类的指针或引用转换为基类表示是安全的;把基类的指针或引用转换成子类表示是不安全的,没有进行动态类型检测,即下行转换不安全。
- dynamic_cast:动态类型转型,主要用于“安全向下转型”,在转换时会进行类型安全检测。dynamic_cast转换成功的话会返回类的指针或引用,失败返回NULL;dynamic_cast进行转换的时候基类中一定要有虚函数,这样才有意义;在类的转换时,在类层次间进行转换的时候,dynamic_cast和static_cast进行上行转换的效果一样,但在进行下行转换的时候,dynamic_cast会进行类型安全检查,所以它更安全;它可以让指向基类的指针转换为指向其子类的指针或是其兄弟类的指针。
- reinterpret_cast:重解释类型转换。它有着和C风格强制类型转换同样的功能;它可以转换任何的内置数据类型为其他的类型,同时它也可以把任何类型的指针转化为其他的类型;ta