c++高手,cout<<endl;重载的是什么?(在线)

“cout<<对象”,里面的<<是重载ostream的对象cout里面的函数,可是怎么cout<<endl;就有点奇怪了,endl是个函数,书上说可以写成endl(cout);
怎么变成“cout<<函数”这是怎么重载的?

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里面的
温馨提示:内容为网友见解,仅供参考
第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里面的
第2个回答  2009-04-21
个人理解是直接输出个回车?
什么都没输出,直接来个回车吧
期待他人解答
相似回答