cast族转换符使用总结
来源:互联网 发布:淘宝禁止发布的商品是 编辑:程序博客网 时间:2024/05/28 22:07
示例1:
class A {};
class B : public A {};
class C {};
A* pA = new A();
B* pB = static_cast<B*>(pA);
C* pC = static_cast<C*>(pA); // 不能通过编译,C和A没有关系
long lData = static_cast<long>(pA); // 不能通过编译,long是内置数据类型,不是类
解析:static_cast是运行在类层次上(只针对类),内置类型(int,float,long等)不能参与转换.参与转换的两个类T和U,只要T->U能够隐式完成,static_cast就能够做U->T,T和U可以只声明而不定义,可以将它看成是隐含转换的显式逆运算.static_cast转换是不安全的.
示例2:
class A { virtual void Fun1() {}; };
class B : public A {};
class C : public B {};
class D : public C {};
C* pC = new C;
A* pA = dynamic_cast<A*>(pC); // pA == pC,不为NULL
B* pB = dynamic_cast<B*>(pA); // pB == pA,不为NULL
pC = dynamic_cast<C*>(pB); // pC == pB,不为NULL
D* pD = dynamic_cast<D*>(pC); // pD == NULL
解析:dynamic_cast是运行在类层次上,内置类型(int,float,long等)不能参与转换.参与转换的类必须被定义.dynamic_cast基于RTTI(运行时类型识别),转化是安全的.
其它:
reinterpret_cast:reinterpret_cast运算符允许任意两种指针类型之间的互相转化,也允许任一整数类型和任一指针类型之间的转换,从本质上来说,这些转换都是不安全的,所以尽量少用reinterpret_cast转换符.
const_cast:通过转换获得对描述为const或volatitle的数据的访问权;或者说经过转换之后,去除数据的const或volatitle属性.
示例:
void Fun1(char* pData){}
void Fun2(const chat* pData)
{
Fun1(const_cast<char*>(pData));
}
- cast族转换符使用总结
- RxJava转换操作符cast
- 标准C++的类型转换符:static cast、dynamic cast、reinterpret cast和const cast
- 标准C++的类型转换符:static cast、dynamic cast、reinterpret cast和const cast
- sql使用cast进行数据类型转换
- 面试总结(二)转 C++的四种cast操作符的区别--类型转换
- C++类型转换操作符(cast operator)
- C++类型转换操作符(cast operator)
- 类型转换操作符Cast Operators
- 开发 PostgreSQL 的 Cast 函数进行类型转换, 使用 CREATE CAST
- cast使用
- 数据库之SQL 数据类型转换 使用cast()函数
- hibernate 类型转换 CAST
- cast : 强制转换类型
- Sql Cast 类型转换
- sqlite CAST 转换类型
- cast强制类型转换
- [转贴] C++类型转换操作符(cast operator)
- Timer
- LzmTW.uSystem.uWindows.uForms + uBindingNavigator
- Effective C++之13
- eclipse快捷键
- LzmTW.uSystem.uWindows.uForms + GridPropertyForm
- cast族转换符使用总结
- 串行通信的基本原理及用MFC实现串口通信编程
- 如何解决移动软件中的连接状态问题
- 论JSP数据库连接池的必要性
- extends和 implements 各自的含义于区别
- 数据库连接池java实现小结
- 一滴水
- 在asp.net页面中传递中文参数
- IBX 常见问题解答(译)