C++:显式类型转换

任何c++的类型转换都可以用c风格的强制类型转换实现

static_cast(variable):静态转换

在编译期可以做类型转换检查,即原有的C风格类型转换没有任何检查,没有编译提示,但是静态类型转换会有编译期的类型检查,对不可转换类型进行编译错误提示。
但该函数只做编译期的静态检查,是没有动态检查,因此不适用于指针(继承体系)之间的转换

dynamic_cast(variable):动态转换

可以在运行期进行动态转换的类型检查;常用于 指针和引用(继承体系) 之间的动态转换,主要用于父子类继承时做下行转换,即将一个父类指针转换为子类指针,(上行转换,子类指针转为父类指针是不会有问题的)。
指针转换失败的话会返回空指针,引用转换失败的话会抛出异常。
class Base {
};
class SubA :public Base {
};
class SubB :public Base {
};

int main() {
	Base* base = new Base();
	SubA* sub_a = new SubA();
	SubB* sub_b = new SubB();

	SubA* a11 = static_cast<SubA*>(sub_b);//静态类型转换,会报错
	SubA* a111 = dynamic_cast<SubA*>(sub_b);//动态类型转换,会报错

	Base* base_true_B = new SubB();
	SubA* a11 = static_cast<SubA*>(base_true_B);//静态类型转换,不会报错
	SubA* a111 = dynamic_cast<SubA*>(base_true_B);//动态类型转换,会报错
}

const_cast(variable):常转换

常量转换,可以将const类型转换为非const

reinterpret_cast(variable):重新解释

将原有变量对应的内存空间中的数据进行重新解释。无论原来变量是什么类型。
该种转换危险性较高,不建议使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值