正文

详解C语言的”endl“函数实现2013-04-26 14:51:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/javaxx/54193.html

分享到:

在学习编程的过程中,我觉得不止要获得课本的知识,更多的是解决问题的方法,面对新问题该怎么解决,这样我们才能走在最前方,我是达内的学员,感谢你对本博客的支持;
首先,endl是一个操作符(Manipulators),但我们必须知道endl是一个什么类型的变量。endl是跟在”<<“运算符后面,故endl应该是一个参数。其实endl是一个函数名,它是一个"<<"运算符重载函数中的参数,参数类型为函数指针。下面我们看下内部函数实现。

1 ostream& ostream::operator << ( ostream& (*op) (ostream&)) 2 { 3 // call the function passed as parameter with this stream as the argument

4 return (*op) (*this); 5 }

1 std::ostream& std::endl (std::ostream& strm) 2 { 3 // write newline

4 strm.put('\n'); 5 // flush the output buffer

6 strm.flush(); 7 // return strm to allow chaining

8 return strm; 9 }

可以看出,运算符重载函数中的函数参数为一个函数指针,其指向一个输入输出均为ostream类引用的函数。而endl正是这样一个函数。所以我们在运行"cout<<endl;"语句时,endl是一个函数参数,类型为函数指针。然后会执行”return (*endl) (*this);“语句,即执行endl函数。endl函数输出一个换行符,并刷新输出缓冲区。

这样我们知道在标准库中endl是作为一个函数实现的,显然我们也可以直接调用这一函数。我们看下面的测试程序:

1 #include<iostream>

2 using namespace std; 3

4 int main() 5 { 6 cout<<endl; 7 endl(cout); 8 return 0; 9 }
知识就是力量,别人学用知识来赚钱的成本低,在达内学习到编程是铸造梦想的地方,如果你喜欢编程,这里,有我们共同语言,共同的故事,共同的梦想!
(责任编辑:广州达内

阅读(2015) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册