C++四种强制类型转换总结

本文详细介绍了C++中四种类型转换操作符:static_cast、reinterpret_cast、dynamic_cast和const_cast的使用方法及特点。通过具体示例展示了不同转换方式的应用场景,并强调了各种转换的安全性和适用范围。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.static_case强制类型转换

   > 用于基本类型间的转换,但不能用于基本类型指针间的转换

   > 用于有继承关系类对象之间的转换和类指针之间的转换

如:

int main()
{
    int i = 0;
	char c = 'c';
	int * pi = &i;
	char* pc = &c;
	
	c = static_cast<char>(i);       //可以正常转换
	pc = static_cast<char *>(pi);   //不能正常转换,编译会报错
	
    return 0;
}

2.reinterpret_cast强制类型转换

   > 用于指针类型间的类型转换

   > 用于整数和指针类型间的强制转换 

如:

typedef void(PF)(int);

int main()
{
	int i = 0;
	char c = 'c';
	int *pi = reinterpret_cast<int *>(&c);      //可以成功转换
	char *pc = reinterpret_cast<char *>(&i);    //可以成功转换
	PF* pf = reinterpret_cast<PF*>(0x12345678); //可以成功转换
	
	c = reinterpret_cast<char>(i);              //转换失败,编译不通过
	return 0;
}

reinterpret_cast直接从二进制位进行复制,是一种极其危险的强制转换。

3.dynamic_cast强制类型转换

    > 主要用于类层次间的转换,还可以用于类之间的交叉转换

    > 具有类型检查的功能,比static_cast更安全

4.const_cast强制类型转换

     > 用于去除变量的const属性

如:

int main()
{
	const int& j = 1;
	int& k = const_cast<int&>(j);   //可以赋值
	const int x = 2;
	int& y = const_cast<int&>(x);   //可以赋值
	
	k = 5;
	
	printf(" j = %d\n",j);
	printf(" k = %d\n",k);
	
	y = 3;
	printf(" x = %d\n",x);
	printf(" y = %d\n",y);
	printf(" &x = %p\n",&x);
	printf(" &y = %p\n",&y);
	return 0;
}

运行结果为:

                                 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值