大家想必在很多場景下需要打印輸出指針地址。看一下下面的輸出:
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 則隱式轉換打印輸出指針指向的地址