C++ 体现dynamic_cast和static_cast差别的两个例子
来源:互联网 发布:苏联解体 征兆 知乎 编辑:程序博客网 时间:2024/06/05 06:10
1、dynamic_cast在转换时会进行类型检查,static_cast则仅仅是根据类型之间的关系在编译时确定不同类型的偏移量。
如下的例子可简单说明其差异
class Base;class Derived;void DynamicCast(Base *ptrBase);void StaticCast(Base *ptrBase);class Base{public:Base():m_iBase(0){}virtual ~Base();private:int m_iBase;};Base::~Base(){DynamicCast(this);//print NULLStaticCast(this);//print not NULL}class Derived:public Base{public:Derived():m_iDerived(1){}private:int m_iDerived;};void DynamicCast(Base *ptrBase){std::cout << "dynamic_cast. Derived ptr:" << dynamic_cast<Derived *>(ptrBase) << std::endl;}void StaticCast(Base *ptrBase){std::cout << "static_cast. Derived ptr:" <<static_cast<Derived *>(ptrBase) << std::endl;}int main(){Base *ptrBase = new Derived();delete ptrBase;return 0;}
2、存在虚继承时无法使用static_cast
class Base{public:Base():m_iBase(0){}virtual ~Base(){};private:int m_iBase;};class Derived: virtual public Base{public:Derived():m_iDerived(1){}private:int m_iDerived;};int main(){Base *ptrBase = new Derived();Derived *ptrDerived = dynamic_cast<Derived *>(ptrBase);//okDerived *ptrDerived2 = static_cast<Derived *>(ptrBase);// errordelete ptrBase;return 0;}
0 0
- C++ 体现dynamic_cast和static_cast差别的两个例子
- static_cast 和 dynamic_cast的区别
- static_cast 和 dynamic_cast 的区别
- static_cast和dynamic_cast的使用
- static_cast和dynamic_cast的用法
- dynamic_cast 和static_cast 的区别
- dynamic_cast和 static_cast的区别
- static_cast,dynamic_cast,reinterpret_cast和c语言转换
- static_cast和dynamic_cast的联系和区别
- static_cast 和 reinterpret_cast的区别以及dynamic_cast
- static_cast、dynamic_cast、const_cast和reinterpret_cast的区别
- static_cast,dynamic_cast和const_cast的区别
- C++ static_cast和dynamic_cast的区别
- dynamic_cast、static_cast、const_cast和reinterpret_cast的区别
- type_cast、static_cast和dynamic_cast
- static_cast,dynamic_cast和reinterpret_cast
- static_cast和dynamic_cast
- dynamic_cast和static_cast
- 只有所有线程都上锁,才能保证数据同步
- 快速排序
- GIF,JPG和PNG等格式图片在网页设计中的应用
- <meta>标签
- jquery选择器
- C++ 体现dynamic_cast和static_cast差别的两个例子
- mysql 查询特殊用法 相关题目
- Linux基础问题(三)
- 黑马程序员IOS-C语言-数组、字符串
- 通过eclipse启动tomcat无法访问tomcat
- .NET学习之040506
- MFC第十天
- 文章标题
- 《Memcache学习总结》[PDF]发布