为了账号安全,请及时绑定邮箱和手机立即绑定

小白求助,请问在c语言的cast()怎么使用?有什么更好的方法吗

小白求助,请问在c语言的cast()怎么使用?有什么更好的方法吗

心有法竹 2021-06-22 18:15:34
只求个人通俗易懂的讲解,请不要复制粘贴网上内容,表示那些完全看不懂
查看完整描述

1 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

对于具有标准定义转换的简单类型而言工作的很好。然而,这样的转换符也能不分皂白的应用于类(class)和类的指针。ANSI-C++标准定义了四个新的转换符:'reinterpret_cast', 'static_cast', 'dynamic_cast' 和 'const_cast',目的在于控制类(class)之间的类型转换。
C++的四种cast操作符的区别和用法:
1 reinterpret_cast
'reinterpret_cast'转换一个指针为其它类型的指针。它也允许从一个指针转换为整数类型。反之亦然。(译注:是指针具体的地址值作为整数值?)
这个操作符能够在非相关的类型之间转换。操作结果只是简单的从一个指针到别的指针的值的二进制拷贝。在类型之间指向的内容不做任何类型的检查和转换。
如果情况是从一个指针到整型的拷贝,内容的解释是系统相关的,所以任何的实现都不是方便的。一个转换到足够大的整型能够包含它的指针是能够转换回有效的指针的。
2 static_cast
'static_cast'允许执行任意的隐式转换和相反转换动作。(即使它是不允许隐式的)
应用到类的指针上,意思是说它允许子类类型的指针转换为父类类型的指针(这是一个有效的隐式转换),同时,也能够执行相反动作:转换父类为它的子类。
3 dynamic_cast
'dynamic_cast'只用于对象的指针和引用。当用于多态类型时,它允许任意的隐式类型转换以及相反过程。不过,与static_cast不同,在后一种情况里(注:即隐式转换的相反过程),dynamic_cast会检查操作是否有效。也就是说,它会检查转换是否会返回一个被请求的有效的完整对象。
检测在运行时进行。如果被转换的指针不是一个被请求的有效完整的对象指针,返回值为NULL.
4 const_cast
这个转换类型操纵传递对象的const属性,或者是设置或者是移除:
其它三种操作符是不能修改一个对象的常量性的。
注意:
'const_cast'也能改变一个类型的volatile qualifier.


查看完整回答
反对 回复 2021-06-28
  • 1 回答
  • 0 关注
  • 371 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信