第1个回答 2015-10-21
cout是一个ostream,ostream里面重载了<<操作符,其中一个是:
_Myt& __CLR_OR_THIS_CALL operator<<(_Myt& (__cdecl *_Pfn)(_Myt&))
{ // call basic_ostream manipulator
_DEBUG_POINTER(_Pfn);
return ((*_Pfn)(*this));
}
参数为一个函数指针,_Myt是一个类型定义,等价于basic_ostream<_Elem, _Traits>,而endl函数为:
template<class _Elem,
class _Traits> inline
basic_ostream<_Elem, _Traits>&
__CLRCALL_OR_CDECL endl(basic_ostream<_Elem, _Traits>& _Ostr)
{
...
}
所以cout<<endl的时候就通过函数指针调用了endl函数,同时将cout作为参数传入,调用的实际上就是endl(cout)。
代码是VS 2005里面的