C++ 打印輸出指針


大家想必在很多場景下需要打印輸出指針地址。看一下下面的輸出:
  
    CObject *  pObject  =  new  CObject ;
     std :: cout  <<  pObject  <<  std  :: endl ;
 
這樣直接打印出指針的pObjedct地址。但是下面的輸出
    char *  ptr  =  "abc" ;
    std :: cout  <<  ptr  <<  std  :: endl ;
直接輸出字符串:"abc",這是為什么?稍等片刻。
 
    void *  pVoid  =  ptr ;
    std :: cout  <<  pVoid  <<  std  :: endl ;
這樣就可以直接輸出指針地址。
 
想必疑問為何這樣的顯現呢?其實都是因為  operator  << 重載導致的行為。
std::cout 是 std::ostream 的一個對象而已,在ostream 的實現中,
對字符串指針進行了全局函數重載處理,VS2008中實現原型:
template  < class  _Traits
inline  basic_ostream  < char  _Traits >&  __CLRCALL_OR_CDECL   operator  <<
(  basic_ostream  < char  _Traits >&  _Ostr  , const   char  *  _Val )
其它打印指針則:ostream 成員函數: _Myt  &  __CLR_OR_THIS_CALL  operator <<(  const   void  *  _Val )
CObject *  pObject 則隱式轉換打印輸出指針指向的地址


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM