C++之endl以及它与换行符的区别

看下C++_primer上的一段话,并给予解释:

img

1. endl 是操纵符

在 C++ 中,endl 是一种特殊的操纵符(manipulator),它的作用不仅是结束一行(相当于换行),还会刷新缓冲区。操纵符是一种可以影响输出行为的特殊值,比如 endlsetw 等。

题外话

想要了解更多关于setw的内容,可以看下这篇博客 C++之setw

2. 结束当前行(换行)

当我们在写入流中使用 endl 时,它会像 '\n' 一样,将光标移到下一行,实现换行的效果。例如:

#include <iostream>
using namespace std;

int main() {
    cout << "Hello, world!" << endl;
    return 0;
}

输出如下:

img

这里 endl 的作用之一就是换行,这点和 '\n' 很类似。

3. 刷新缓冲区(重要)

在 C++ 中,输出操作通常会先把数据写入到一个内存区域,叫做缓冲区(buffer)。当缓冲区的数据足够多或者遇到特定条件时,数据会被写入到最终的输出设备(比如显示器或文件)中。这个机制可以提高性能,因为直接频繁地写入输出设备可能效率较低。

  • 缓冲区刷新:endl 会强制刷新缓冲区,将缓冲区中的内容立即写入到输出设备。

  • 为什么需要刷新:缓冲区刷新可以确保到目前为止产生的所有输出都真正写入输出流,而不是等待缓冲区满了才写入。这在程序调试或实时输出时非常重要,可以确保每一行都立刻显示在屏幕上。

4. endl 与 '\n' 的区别

  • '\n' 只是一个换行符,它只会将光标移动到下一行,并不会强制刷新缓冲区。

  • endl 除了换行,还会立即刷新缓冲区。

比如:

#include <iostream>
using namespace std;

int main() {
    cout << "Hello, world!" << '\n'; // 换行但不刷新缓冲区
    cout << "This is line 2" << endl; // 换行并刷新缓冲区
    return 0;
}

输出如下:

img

在这里,'\n' 只是换行,数据可能会暂时保存在缓冲区中,直到缓冲区被填满或程序结束时才输出。而 endl 会立刻输出,并且清空缓冲区。

5. 总结

  • endl 是 C++ 的操纵符,用于换行并立即刷新缓冲区。

  • 缓冲刷新可以确保数据即时写入输出设备,不会滞留在内存中的缓冲区,避免延迟输出。

  • 区别:'\n' 只是换行,endl 同时换行并刷新缓冲区。

posted @   hisun9  阅读(230)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示