C++中四种强制类型转换操作符之间的区别
2010-06-10 16:00
162 查看
先介绍const_cast和reinterpret_cast:
const_cast用于消除类型中的const, volatile, __unaligned属性。
reinterpret_cast主要用于转换不相容的数据类型,特别是在指针类型和非指针类型之间进行转换,当然它也可以用于转换指针之间的转换。
再介绍一对相对立的static_cast和dynamic_cast:
它们都是c++风格的强制类型转换,不过不具备上面2中转换的特性,即:不能在指针类型和非指针类型之间进行转换,也不能消除类型中的const和volatile属性。
它们的区别在于:static_cast在编译时刻就验证被转换的变量与目标类型之间是否相容,如果类型转换不合理,就会导致编译时刻错误;dynamic_cast在运行时刻对强制类型转换进行检查。当指针无效时,返回0,若是无效的引用强制类型转换就发生bad_cast异常。
另外,dynamic_cast不能用于转换没有继承关系的类型,如int转换到double类型。
详情可以参加《More Efective C++》第二条。
const_cast用于消除类型中的const, volatile, __unaligned属性。
reinterpret_cast主要用于转换不相容的数据类型,特别是在指针类型和非指针类型之间进行转换,当然它也可以用于转换指针之间的转换。
再介绍一对相对立的static_cast和dynamic_cast:
它们都是c++风格的强制类型转换,不过不具备上面2中转换的特性,即:不能在指针类型和非指针类型之间进行转换,也不能消除类型中的const和volatile属性。
它们的区别在于:static_cast在编译时刻就验证被转换的变量与目标类型之间是否相容,如果类型转换不合理,就会导致编译时刻错误;dynamic_cast在运行时刻对强制类型转换进行检查。当指针无效时,返回0,若是无效的引用强制类型转换就发生bad_cast异常。
另外,dynamic_cast不能用于转换没有继承关系的类型,如int转换到double类型。
详情可以参加《More Efective C++》第二条。
相关文章推荐
- 并查集类的c++封装,比較union_find algorithm四种实现方法之间的性能区别
- C++的四种cast操作符的区别
- C++中四种强制类型转换的区别
- C++中的四种强制类型转换的区别
- C++的四种cast操作符的区别--类型转换
- 【转】C++中的四种强制类型转换的区别
- C++中的四种强制类型转换的区别
- 解析C++中四种强制类型转换的区别详解
- C++中的四种强制类型转换的区别
- 解析C++中四种强制类型转换的区别详解
- C++类型转换操作符之间的区别
- C++的四种cast操作符的区别--类型转换
- C++的四种cast操作符的区别
- C++的四种cast操作符的区别
- 面试总结(二)转 C++的四种cast操作符的区别--类型转换
- 解析C++中四种强制类型转换的区别详解
- C++的四种cast操作符的区别
- C++的四种cast操作符的区别
- C++的四种cast操作符的区别
- C++四种强制类型转换运算符的联系与区别