const_cast,reinterpret_cast,static_cast,dynamic_cast

static_cast:用于非多态类型的转换。

dynamic_cast:用于多态类型的转换。

const_cast:用来消除const, volatile, __unaligned属性的转换。

reinterpret_cast:用于空间的重新解释。


1、C++中的static_cast执行非多态的转换,用于代替C中通常的转换操作。因此,被做为隐式类型转换使用。比如:
int i;
float f = 166.7f;
i = static_cast<int>(f);
此时结果,i的值为166。
2、C++中的reinterpret_cast主要是将数据从一种类型的转换为另一种类型。所谓“通常为操作数的位模式提供较低层的重新解释”也就是说将数据以二进制存在形式的重新解释。比如:
int i;
char *p = "This is a example.";
i = reinterpret_cast<int>(p);
此时的结果输出为:i: 4229212
此时结果,i与p的值是完全相同的。reinterpret_cast的作用是说将指针p的值以二进制(位模式)的方式被解释为整型,并赋给i,一个明显的现象是在转换前后没有数位损失。
3.cont_cast
char *i;
const char *p = "This is a example.";
//i=p;//这里将出错
i = const_cast<char*>(p);
qDebug()<<"i:"<<i;

输出;i: This is a example.

4.dynamic_cast
2)dynamic_cast<T*>(a)

完成类层次结构中的提升。T必须是一个指针、引用或无类型的指针。a必须是决定一个指针或引用的表达式。

表达式dynamic_cast<T*>(a) 将a值转换为类型为T的对象指针。如果类型T不是a的某个基类型,该操作将返回一个空指针。




例子:

class A { ... };

class B { ... };

void f()

{

A* pa = new A;

B* pb = new B;

void* pv = dynamic_cast<A*>(pa);

// pv 现在指向了一个类型为A的对象

...

pv = dynamic_cast<B*>(pb);

// pv 现在指向了一个类型为B的对象

}



class B{};
class C : public B {};
class D : public C {};

void main()
{
D* pd = new D;

C* pc = dynamic_cast <C*> (pd);
B* pb = dynamic_cast <B*> (pd);
//C* pc = pd;
//B* pb = pd;

void *p=dynamic_cast <C*> (pd);
//void *p=pd;
}

dynamic_cast是运行时检查的,可以进行upcast和downcast。当然主要作用是downcast,即基类指针/引用到派生类指针/引用的转换。如果源和目标类型没有继承/被继承关系,编译器会报错;否则必须在代码里判断返回值是否为NULL来确认转换是否成功。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值