more effective c++笔记1-----Item M2:尽 量使用C++风格的类型转换
来源:互联网 发布:格拉姆矩阵 编辑:程序博客网 时间:2024/05/02 04:38
//1. dynamic_cast 转换的两个类 需要有虚函数//2. dynamic_cast 如果转换的是两个实例指针,转换失败返回的是NULL空CWeget*pBase= new CWeget;CChildWeget*pChild= new CChildWeget;CWeget*ptrBase= dynamic_cast<CWeget*>(pChild);// successCChildWeget *ptrChild= dynamic_cast<CChildWeget*>(pBase);// return NULL//3. 如果是引用转换失败会 报出异常,vc9 异常截图如下CWegetBase;CChildWegetChild;CWeget& reBase= dynamic_cast<CWeget&>(Child);// successCChildWeget& reChild= dynamic_cast<CChildWeget&>(Base);// exception
dynamic_cast 引用方式下转换失败抛出的异常截图(win7,vs2008):
2.杂谈
如果你使用的编译器缺乏对新的类型转换方式的支持,你可以用传统的类型转换方法代替static_cast, const_cast, 以及reinterpret_cast。也可以用下面的宏替换来模拟新的类型转换语法:
#define static_cast(TYPE,EXPR) ((TYPE)(EXPR))
#define const_cast(TYPE,EXPR) ((TYPE)(EXPR))
#define reinterpret_cast(TYPE,EXPR) ((TYPE)(EXPR))
你可以象这样使用使用:
double result = static_cast(double, firstNumber)/secondNumber; bbs.theithome.com
update(const_cast(SpecialWidget*, &sw));
funcPtrArray[0] = reinterpret_cast(FuncPtr, &doSomething);
这些模拟不会象真实的操作符一样安全,但是当你的编译器可以支持新的的类型转换时,它们可以简化你把代码升级的过程。
2.总结
dynamic_cast:把指向基类的指针或引用转换成指向其派生类或其兄弟类的指针或引用,而且你能知道转换是否成功。失败的转换将返回空指针(当对指针进行类型转换时)或者抛出异常(当对引用进行类型转换时)
static_cast:在没有继承关系的类型中进行转换。
const_cast:如果是为了去除const,你总得用。
reinterpret_cast:使用这个操作符的类型转换,其的转换结果几乎都是执行期定义(implementation-defined)。因此,使用reinterpret_casts的代码很难移植。
- more effective c++笔记1-----Item M2:尽 量使用C++风格的类型转换
- 《More Effective C++》 Item M2:尽量使用C++风格的类型转换
- [More Effective C++]尽量使用C++风格的类型转换
- 《more effective c++》Item M5:谨慎定义类型转换函数
- More Effective C++:类型转换
- More Effective C++:类型转换
- More Effective C++----(1)指针与引用的区别 & (2)尽量使用C++风格的类型转换 & (3)不要对数组使用多态
- 《Effective C#》 Item 28: 避免使用类型转换操作符
- More Effective C++:Item 27
- More Effective C++:Item 27
- C++中尽量使用C++提供的类型转换(2)---《More Effective C++》
- 《More Effective C++》笔记
- More Effective C++议题【二】:尽量使用C++风格的类型转换
- More Effective C++ ——02_尽量使用C++风格的类型转换
- more effective c++——Item M30 代理类(三)隐式类型转换与代理类
- 《more effective c++》Item M1:指针与引用的区别
- 《More Effective C++》 Item M1:指针与引用的区别
- read Item 25 of《More Effective C++》
- 共预留1预留1
- ibatis扩展支持主键生成的方法(非数据库方式)
- 也均同意预留1预留1
- 自定义ServletRquestListener和ServletRequestAttributeListener的监听
- 使用as计算中文字符串长度
- more effective c++笔记1-----Item M2:尽 量使用C++风格的类型转换
- ACCESS中的参数查询与自定义函数的实现
- 51
- 配置vim的Nginx配置文件语法高亮的脚本
- android.adb命令
- js得到两个日期之间间隔的天数
- SSH web.xml配置
- Sybase的安装、配置及使用(二)
- hdu 3826