C++中四种强制类型转换的区别
2015-08-13 09:38
471 查看
static_cast:用法static_cast<type>(old)将old转换成type类型(可以是类类型,基本类型之间的转换),但没有运行时类型检查来保证安全性,基类不需要有虚函数,当把派生类转化成基类指针类型时,是安全的,但把基类转化成派生类时,不会进行动态类型检查
注意: static_cast不能转换掉expression的const、volitale或者_unaligned属性
dynamic_cast:用法dynamic_cast<type>(old),type必须是类的指针、类的引用或者void*基类必须有虚函数,否则编译不过,而static_cast 没有这个要求,当利用dynamic_cast把基类转化成派生类类型时,会动态检验操作是否安全,如对派生类的成员函数showbook访问
注意: static_cast不能转换掉expression的const、volitale或者_unaligned属性
reinterpret_cast:用法reinterpret_cast<type>(expression),转换一个指针为其他类型的指针,也允许将一个指针转换为整数类型,反之亦然。这个操作符能够在非相关的类型之间进行转换,如两个不相关的类之间,或者普通类型之间的转换。慎用
注意: static_cast不能转换掉expression的const、volitale或者_unaligned属性
const_cast:用法const_cast<type>(old),type必须是指针,引用或者类的对象(利用引用,否则会出现析构两次对象),这个类型操纵传递对象的const属性,或者是设置或者是移除
注意: static_cast不能转换掉expression的const、volitale或者_unaligned属性
dynamic_cast:用法dynamic_cast<type>(old),type必须是类的指针、类的引用或者void*基类必须有虚函数,否则编译不过,而static_cast 没有这个要求,当利用dynamic_cast把基类转化成派生类类型时,会动态检验操作是否安全,如对派生类的成员函数showbook访问
注意: static_cast不能转换掉expression的const、volitale或者_unaligned属性
reinterpret_cast:用法reinterpret_cast<type>(expression),转换一个指针为其他类型的指针,也允许将一个指针转换为整数类型,反之亦然。这个操作符能够在非相关的类型之间进行转换,如两个不相关的类之间,或者普通类型之间的转换。慎用
注意: static_cast不能转换掉expression的const、volitale或者_unaligned属性
const_cast:用法const_cast<type>(old),type必须是指针,引用或者类的对象(利用引用,否则会出现析构两次对象),这个类型操纵传递对象的const属性,或者是设置或者是移除
相关文章推荐
- java 的jna与C/C++的对应关系
- 【零】ODB - C++ 持久层框架ODB
- eclipse 配置 opencv (c++版)
- c++常见输入方法[持续更新]
- C++ STL标准程序库初探
- OC语言中数组的使用
- C++ primer【笔记】关联容器 map
- 黑马程序员-----------C语言基础-----------分支结构
- C++安全异常std:auto_ptr
- [转载] C++ 多线程编程总结
- VC++ 关于 ON_UPDATE_COMMAND_UI 相关的作用.
- C语言内存分配
- C语言的函数
- c++的类中typedef的作用
- hdu1598 有向边 并查集
- C++函数调用的完美灾难
- C++ 指针与引用 知识点 小结
- 在C#中调用C++写的DLL
- c++,为什么要引入虚拟继承
- C++之迭代器(iterator)与集合(vector)