C++进阶剖析(三)之新型类型转换

本文主要介绍了C语言和C++中的强制类型转换。指出C方式强制类型转换过于粗暴,编译器难判断正确性且难以定位。C++将强制类型转换分为四类,即static_cast、const_cast、dynamic_cast和reinterprete_cast,并分别阐述了它们的转换规则。

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

备注: 后面看到 类,继承,虚函数的时候继续来补充。

1.1 C语言中强制类型转换
1.1.1 示例

  • (Type )(Expression)

1.1.2 C方式强制类型转换存在的问题

  • 过于粗暴
    (1) 任意类型之间都可以进行转换,编译器很难判断其正确性
  • 难以定位
  • (1) 在源码中无法快速定位所有使用强制类型转换的语句

1.1.3 如何才能更安全的转换呢
C++ 中将强制类型转换分成了四类.

  • static_cast
  • const_cast
  • dynamic_cast
  • reinterprete_cast
  • 用法 xxx_cast (expression)

1.2 static_cast 强制类型转换
1.2.1 转换规则

  • 用于基本类型间的转换
  • 不能用于基本类型指针间的转换
  • 用于有继承关系类对象之间的转换和类指针之间的转换。

1.2.2
案例1 :


#include <stdlib.h>

void static_cast_demo1()
{
	int a =0x1234;
	char  b= static_cast<char>(a);
	printf("b= %d\n",b);//0x34
}
/*
void static_cast_demo2()   //error    static_cast不能用于 普通类型指针间的转换
{
	int a =10;
	int* p1= &a;
	
	char * p2= static_cast<char*>(p1);   
	printf("p2 = %p\n",p2);
}
*/
int main(int argc, char* argv[])
{
	static_cast_demo1();
//	static_cast_demo2();
	return 0;
}

1.2.3

1.3 const_cast 强制类型转换
1.3.1 转换规则

  • 用于去除变量的只读属性
  • 强制转换的目标类型必须指针或者引用
    1.3.2
    示例代码1
void const_cast_demo()
{
	int a =10;
	const int * p =&a;
	int * p2 =const_cast<int *> (p);
	 *p2 = 20;
	printf("a = %d\n",a);  //20
}

int main(int argc, char* argv[])
{
	const_cast_demo();
	return 0;}

1.3.3

1.4 reinterpret_cast 强制类型转换
1.4.1 转换规则

  • 用于指针类型间的强制转换
  • 用于整数和指针类型间的强制转换
    1.4.2
void  reinterpret_cast_demo()
{
	int a =10;
	int* p1= &a;
	char * p2= reinterpret_cast<char*>(p1);
	printf("p2 = %p\n",p2);
}
int main(int argc, char* argv[])
{
	reinterpret_cast_demo();
	return 0;
}

1.4.3

1.5 dynamic_cast 强制类型转换
1.5.1 转换规则

  • 用于有继承关系的类指针间的转换
  • 用于有交叉关系的类指针间的转换
  • 具有虚函数的支持
    1.5.2
    1.5.3

参考一 :狄泰软件学院C++课程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值