C++中的dynamic_cast和static_cast

2014-11-24 09:07:24 · 作者: · 浏览: 1

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(pb);
  D *pd2 = dynamic_cast(pb);
  }


  在上面的代码段中,如果pb指向一个D类型的对象,pd1和pd2是一样的,并且对这两个指针执行D类型的任何操作都是安全的;


  但是,如果pb指向的是一个B类型的对象,那么pd1将是一个指向该对象的指针,对它进行D类型的操作将是不安全的(如访问m_szName),


  而pd2将是一个空指针。