C++类型转换

C++中有四种强制类型转换操作符:static_cast、dynamic_cast、const_cast、reinterpret_cast,下面分别介绍:

1. 静态类型转换static_cast,

此类转换只完成编译时期的转换检查,主要有几个运用场合,注意安全性要程序员自己保证。

用于基类和子类之间指针或引用的转换

任何类型指针与void指针转换

空指针转换成目标指针

基本数据类型的转换,安全性程序员保证,不做检查,一般将小转大(int转long )这样保证数据不丢失

2.动态类型转换dynamic_cast

将一个基类对象指针(或引用)cast到继承类指针,dynamic_cast会根据基类指针是否真正指向继承类指针来做相应处理。

dynamic_cast <type-id> (expression)
该运算符把expression转换成type-id类型的对象。Type-id 必须是类的指针、类的引用或者void*;
如果 type-id 是类指针类型,那么expression也必须是一个指针,如果 type-id 是一个引用,那么 expression 也必须是一个引用。
dynamic_cast运算符可以在执行期决定真正的类型。如果 downcast 是安全的(也就说,如果基类指针或者引用确实指向一个派生类对象)这个运算符会传回适当转型过的指针。如果 downcast 不安全,这个运算符会传回空指针(也就是说,基类指针或者引用没有指向一个派生类对象)。
dynamic_cast主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换。
在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的;
在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。

3.常类型转换const_cast

其主要作用是:修改类型的const或volatile属性。使用该运算方法可以返回一个指向非常量的指针(或引用)指向b1,就可以通过该指针(或引用)对它的数据成员任意改变。

4.再解释类型转换reinterpret_cast

所有指针的值都是一个表示地址的数值,值本身的转换是没有任何问题。“再解释”是指对指针指像的哪段内存重新解释。

可以实现不同类型指针之间的相互转换,同时也支持将指针与数字之间的转换