C++中的dynamic_cast和static_cast

来源:互联网 发布:三菱系统手动编程实例 编辑:程序博客网 时间:2024/06/18 10:58


dynamic_cast和static_cast:
dynamic_cast < type-id > ( expression )
  该运算符把expression转换成type-id类型的对象。Type-id必须是类的指针、类的引用或者void*;
他们区别是
  在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的;
  在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。
如下代码:
class B{
  public:
  int m_iNum;
  virtual void foo();
  };
  class D:public B{
  public:
  char *m_szName[100];
  };
  void func(B *pb){
  D *pd1 = static_cast<D *>(pb);
  D *pd2 = dynamic_cast<D *>(pb);
  }
  在上面的代码段中,如果pb指向一个D类型的对象,pd1和pd2是一样的,并且对这两个指针执行D类型的任何操作都是安全的;
  但是,如果pb指向的是一个B类型的对象,那么pd1将是一个指向该对象的指针,对它进行D类型的操作将是不安全的(如访问m_szName),
  而pd2将是一个空指针。

原创粉丝点击