C++的四种转换(const_cast、static_cast、dynamic_cast、reinterpreter_cast)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++的四种转换(const_cast、static_cast、dynamic_cast、reinterpreter_cast),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1313字,纯文字阅读大概需要2分钟。
内容图文
![C++的四种转换(const_cast、static_cast、dynamic_cast、reinterpreter_cast)](/upload/InfoBanner/zyjiaocheng/725/569bd806d2224869ab656e7df50c9c55.jpg)
static_cast
相当于C语言中的强制转换:(类型)表达式或类型(表达式),用于各种隐式转换
非const转const、void*转指针、int和char相互转换
用于基类和子类之间的指针和引用转换,非指针直接报错
向上转化是安全的,如果向下转能(指针或引用)成功但是不安全,结果未知;
dynamic_cast
用于动态类型转换。只能用于含有虚函数的类,必须用在多态体系种,用于类层次间的向上和向下转化。只能转指针或引用。向下转化时,如果是非法的对于指针返回NULL,对于引用抛异常。
在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。
如果没有virtual方法进行下行转换(指针或引用)会直接报错
const_cast
常量指针被转化成非常量的指针,并且仍然指向原来的对象;
常量引用被转换成非常量的引用,并且仍然指向原来的对象;
const_cast一般用于修改底指针。如const char *p形式。
const int a=10;
int *p=const_cast<int*>(&a); //p和a指向同一块内存地址
*p = 100; //修改*p,但a=10,*p=100
reinterpret_cast
(重解释转换)几乎什么都可以转,比如将int转指针,可能会出问题,尽量少用;随意的转换编译都会通过,但是不安全的转换运行时会异常
错误的使用reinterpret_cast很容易导致程序的不安全,只有将转换后的类型值转换回到其原始类型,这样才是正确使用reinterpret_cast方式。
reinterpret_cast不能转换掉表达式的const
可以用在将void*转换为int类型
unsigned short Hash( void *p ) {
unsigned int val = reinterpret_cast<unsigned int>( p );
return ( unsigned short )( val ^ (val >> 16));
}
内容总结
以上是互联网集市为您收集整理的C++的四种转换(const_cast、static_cast、dynamic_cast、reinterpreter_cast)全部内容,希望文章能够帮你解决C++的四种转换(const_cast、static_cast、dynamic_cast、reinterpreter_cast)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。