新式类型转换

1、新型的类型转换:
	1、C语言的强制类型转换。
		1、typedef void (PF) (int);
		2、struct Point{
			int x;
			int y;
		};
		3、int v = 0x1234;
		4、PF *pf = (PF *)v;
		5、char c = (char )v;
		6、Point *p = (Point *)v;
	2、C方式强制类型转换存在的问题。
		1、过于粗暴,任意类型之间都可以进行类型转换。编译器很难判断正确性。
		2、难于定位,在源代码中很难定位到强制类型转换到语句。
		3、强制类型转换在实际工程中是很难避免的,如何才能进行有效安全的强制类型转换?那许需要新型的强制类型转换方式。
	3、新式强制类型转换。
		1、C++将强制类型转换分为四种不同的类型。(牢记场合)
			1、static_cast
			2、const_cast
			3、dynamic_cast
			4、reinterpret_cast
			用法:xxx_cast(Expession)
		1、static_cast强制类型转换。
			1、用于基本类型转换。
			2、不能用于基本类型指针之间的类型转换。
			3、用于有继承关系,类对象之间的转换,类指针之间的转换。
		2、const_cast强制类型转换。
			1、用于去掉变量的只读属性。
			2、强制转换的目标类型必须是指针或者引用。
		3、reinterpret
			1、用于指针类型之间的转换。
			2、用于整形和指针类型之间的转换。
		4、dynamic_cast
			1、用于继承关系的类指针之间的相互转换。
			2、用于交叉关系之间的类指针之间的相互转换。
			3、具有类型检查功能。
			4、需要虚函数的支持。
小结:
	1、C方式的强制转换过于粗暴。
	2、潜在问题不易发现,不易在代码中定位。
	3、新式类型转换以C++的关键字的方式出现。
	4、编译器能够帮助检查潜在的问题。
	5、非常方便的在代码中定位。
	6、支持动态类型识别(dynamic_cast)。

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值