问题,endl是函数么?怎么不用加括号?

gauldoth 2009-12-10 04:01:27
RT,
为啥不用加括号?
搜索到这个。
They are still regular functions and can also be called as any other function using a stream object as argument, for example:
是不是函数都能不加括号?
...全文
178 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
gauldoth 2009-12-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 akirya 的回复:]
呃,    ostream的 < <接受一个函数指针做参数
[/Quote]
晕。。。昨天看到了,明白了,今天居然忘记了。。。。。。
谢谢。
w_anthony 2009-12-10
  • 打赏
  • 举报
回复
之前都没想到过这个问题,特地去跟踪了下代码,发现确实operator <<接受函数指针作参数

_Myt& operator<<(_Myt& (__cdecl *_Pfn)(_Myt&)) //这里的_Myt即是std::cout类型,参数类型是_Myt& (__cdecl*)(_Myt&),而std::endl确实是这个类型
{ // call basic_ostream manipulator
return ((*_Pfn)(*this)); //这里回调一下函数参数,*this作为endl函数的参数,就执行了下面这个函数
}

_CRTIMP2 inline basic_ostream<char, char_traits<char> >&
__cdecl endl(basic_ostream<char, char_traits<char> >& _Ostr) //*this传进来后_Ostr这个时刻就是std::cout
{ // insert newline and flush byte stream
_Ostr.put('\n'); //输出一个换行
_Ostr.flush();
return (_Ostr);
}
  • 打赏
  • 举报
回复
basic_ostream<_Elem, _Tr>& operator<<(
basic_ostream<_Elem, _Tr>& (*_Pfn)(basic_ostream<_Elem, _Tr>&)
);
basic_ostream<_Elem, _Tr>& operator<<(
ios_base& (*_Pfn)(ios_base&)
);
basic_ostream<_Elem, _Tr>& operator<<(
basic_ios<_Elem, _Tr>& (*_Pfn)(basic_ios<_Elem, _Tr>&)
);


当遇见
template class<_Elem, _Tr>
basic_ostream<_Elem, _Tr>& endl(
basic_ostream<_Elem, _Tr>& _Ostr
);

就会调用

basic_ostream<_Elem, _Tr>& operator<<(
basic_ostream<_Elem, _Tr>& (*_Pfn)(basic_ostream<_Elem, _Tr>&)
);
MoXiaoRab 2009-12-10
  • 打赏
  • 举报
回复
有点东西没必要深究,知道就行了,C++就是这么设计的
MoXiaoRab 2009-12-10
  • 打赏
  • 举报
回复
endl是个模板函数,C++就是这么设计的,这是一种不算函数的函数,准确的说,叫输入输出流的效用算子(effector)
  • 打赏
  • 举报
回复
呃, ostream的<<接受一个函数指针做参数

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧