c++中的四种cast转化

1、const_cast(常量转化)

用于将const变量转化为非const。这里需要注意:如果一个变量被定义为const,通过const_cast转化函数转化后,这个值还是不能改变的。这里我们需要记住一句话:const_cast不是为了改变const变量的值而设计的,在函数参数的传递上const_cast的作用才显示出来。
 

void fun(int* n)
{
	cout << n << endl;
}
int main()
{
	const int n = 5;
	//fun(&n);类型不匹配
	fun(const_cast<int*>(&n));
	return 0;
}

2、static_cast(静态转化,不作安全性检查)

  • (1)用于基础类型之间的转换。
  • (2)把空指针转化成目标类型的空指针。
  • (3)把任何类型的表达式转化为void类型。
  • (4)用于类层次结构中基类和派生类的之间指针和引用的转化。
  • (5)用于多态向上转化(派生类转基类),如果向下(基类转派生类)转化可以转成功,但结果未知(因为派生类中可能会新增加其他成员,转化过去就会导致这一部分的数据不确定)。
//Test1为派生类,Test为基类
Test1 t1(4,2);
Test t = static_cast<Test1>(t1);

static_cast在转化失败后不会返回空,而是返回那个转换的未知的东西,这就存在一定的安全性。

3、dynamic_cast(动态转化)

dynamic_cast主要用于类层次中的基类和派生类之间的指针和引用的转化,在运行时会进行类型检查,因此可以保证向下转化的安全性。

它通过判断在执行到该语句的时候变量的运行时的类型和要转化的类型是否相同来判断是否能够进行向下转化。

4、reinterpret_cast(重新解释转化)

和它的名字一样,这个几乎什么都可以转,但会出问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值