endl与 \n ; 网罗的自己捋捋~

本文详细解析了C++中endl与' '的区别,指出endl不仅插入换行符,还会刷新输出缓冲区,确保数据立即显示或写入文件。适用于需要即时输出的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

endl会把一个'\n'写入流。

区别是,endl除了写'\n'进输出流之外,还调用输出流的flush函数,刷新缓冲区,让数据直接写入文件或者屏幕上。

他们都可以用的,不过如果需要立即显示,比如输出到显示器的场合,最用用endl,如果只是写一个'\n'不一定会立即显示,因为数据可能被存在缓冲区里,没有理解写入设备。

输出流是文件考虑效率的时候,可以直接写'\n',这样不刷新缓冲区,会更快


首先,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 }

其输出为两个空行。”cout<<endl"中,endl是一个类型为函数指针的函数参数,通过运算符重载函数间接调用了endl函数。而“endl(cout)”中,endl是函数名,直接调用了endl函数

转载于:https://my.oschina.net/u/2256217/blog/368897

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值