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));
}

最新文章

  1. MyEclipse 2014跟2015破解
  2. C语言程序设计第一次作业
  3. position置顶或某固定位置 兼容ie6ie7
  4. .NET Core应用程序的2种部署方式
  5. ~~圣诞节到啦, canvas雪花效果, 漂亮到简直没天理啊~~
  6. python_Day_02[数组、列表、元组之篇]
  7. MVC ActionResult -- JavaScriptResult,JsonResult
  8. shell自定义函数
  9. zz存储系统中缓存的三种类型
  10. RMQ——窗口题解
  11. NET基础课--Linq第一讲
  12. 实现android里面WebView显示内容
  13. Jenkins系列——使用checkstyle进行代码规范检查【升级版】
  14. IntelliJ IDEA 创建 Java包
  15. C#动态调用webService出现 基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系。
  16. JavaScript 常用内置对象(字符串属性、Math对象、Array数组对象)
  17. (PMP)解题技巧和典型题目分析(0903-2班)
  18. java.lang.IllegalArgumentException: An invalid domain [.test.com] was specified for this cookie解决方法
  19. SpringSecurity-FilterSecurityInterceptor的作用
  20. C#中Convert.ToInt32、int.TryParse、(int)和int.Parse四者的区别

热门文章

  1. PHP常见数组函数总结
  2. 如何成为一名AI工程师
  3. @Configuration@Bean
  4. 翻转引起 cocos studio 引擎与cocos2d 代码相同坐标显示不同
  5. beego——view 模板语法
  6. laravel使用阿里云OSS上传图片
  7. java打印出某一指定路径下的文件夹内的所有子文件夹和文件,并区分开来
  8. 【Python】画一个心形
  9. Github中进行fork后,原仓库更新了如何与原仓库同步
  10. 2018护网杯easy_tornado(SSTI tornado render模板注入)