Cpp_类型转换

C风格的类型转换C++完全兼容。

C++新增了四个显式类型转换运算符。
1)静态类型转换:static_cast<目标类型>
A.将基类的指针或引用转换为子类的指针或引用;
B.自定义类型转换。

它允许子类类型的指针转换为父类类型的指针(这是一个有效的隐式转换),同时,也能够执行相反动作:转换父类为它的子类,但会给出编译警告

下面的例子中,被转换的父类没有被检查是否与目的类型相一致。

class Base {};
class Derived : public Base {};

Base *a    = new Base;
Derived *b = static_cast<Derived *>(a); //子类的指针指向父类的对象

基础类型之间的标准转换:

double d = 3.14159265;
int    i = static_cast<int>(d);

2)动态类型转换:dynamic_cast<目标类型>
将基类的指针或引用转换为子类的指针或引用,在运行期检查基类指针或引用的目标对象是否真的是所要转换的子类类型。保证了“安全的向下转型(safe downcasting)”

它允许任意的隐式类型转换(基类指针指向子类)以及相反过程。不过,与static_cast不同,在后一种情况里(注:即隐式转换的相反过程),dynamic_cast会检查操作是否有效。

检测在运行时进行。如果被转换的指针不是一个被请求的有效完整的对象指针,返回值为NULL.
代码:

class Base { virtual dummy() {} };
class Derived : public Base {};

Base* b1 = new Derived;
Base* b2 = new Base;

Derived* d1 = dynamic_cast<Derived *>(b1); //succeeds
Derived* d2 = dynamic_cast<Derived *>(b2); // fails: returns 'NULL',在子类的指针看来,基类的对象是不完整的。bad_cast的异常类型被抛出

3)常量类型转换:const_cast<目标类型>
去除或添加指针或引用的常属性。

4)重解释类型转换:reinterpret_cast<目标类型>
A.任意类型的指针或引用之间进行转换;
B.在指针和整数之间进行转换。

这个操作符能够在非相关的类型之间转换。操作结果只是简单的从一个类型的指针到别的类型的指针的值的二进制拷贝。
例如:

A * a = new A;
B * b = reinterpret_cast<B *>(a);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值