歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C++中的dynamic_cast和static_cast

C++中的dynamic_cast和static_cast

日期:2017/3/1 10:05:30   编辑:Linux編程

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將是一個空指針。

Copyright © Linux教程網 All Rights Reserved