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

news/2024/11/8 22:45:43/文章来源:https://www.cnblogs.com/hisun9/p/18536064

看下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 同时换行并刷新缓冲区。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/829068.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++之fixed

在 C++ 中,fixed 是一个操纵符(manipulator),用于指定浮点数的显示格式。 在默认情况下,C++ 会使用科学计数法或定点(小数点)格式输出浮点数,具体取决于数值的大小和有效位数。 然而,当使用 fixed 时,它会强制所有浮点数都以定点格式显示,即以小数点后的固定位数输出…

MyBatis如何关闭一级缓存(分注解和xml两种方式)

MyBatis如何关闭一级缓存(分注解和xml两种方式)@目录问题:为什么有缓存什么场景下必须需要关闭一级缓存关闭一级缓存方法(针对使用MyBatis场景)第1种:注解形式(可指定仅仅某个Mapper关闭注解)第2种:sql动态拼接传入的随机数 问题:为什么有缓存 mybatis默认开启一级缓存 什…

记录一下 Win11 下自编译 Ollama 本地运行 llama3.1

运行环境Windows 11(显卡 AMD Radeon RX 6650 XT)VS Code(用于查找特定代码,在 gfx1030 附近添加 gfx1032)GitGo 版本 $ go version go version go1.23.3 windows/amd64MinGW (编译需要 make 命令) $ make -v GNU Make 4.4.1 Built for x86_64-w64-mingw32 Copyright (C) …

记录一下 Win11 下编译 Ollama 本地运行 llama3.1

记录一下 Win11 下自编译 Ollama 本地运行 llama3.1 运行环境Windows 11(显卡 AMD Radeon RX 6650 XT)VS Code(用于查找特定代码,在 gfx1030 附近添加 gfx1032)GitGo 版本 $ go version go version go1.23.3 windows/amd64MinGW (编译需要 make 命令) $ make -v GNU Make …

解决Mac M芯片 Wireshark 运行rvictl -s 后,出现Starting device failed

前言 mac os big sur 之后,苹果系统的安全性能提升,导致 rvictl -s 创建虚拟网卡失败。 $ rvictl -s 000348120-001621w21184C01E bootstrap_look_up(): 1102Starting device 000348120-001621w21184C01E [FAILED]这是由于 rvictl 需要开启系统扩展才能使用,但是 M 芯片的 M…

2024-2025-1 20241312 《计算机基础与程序设计》第7周学习总结

|这个作业属于哪个课程|2024-2025-1-计算机基础与程序设计| |这个作业要求在哪里|2024-2025-1计算机基础与程序设计第七周作业| |这个作业的目标|①数组与链表 ②基于数组和基于链表实现数据结构 ③无序表与有序表 ④树 ⑤图 ⑥子程序与参数| |作业正文|https://www.cnblogs.co…

Oracle 存储过程分页 + Sqlsugar调用

一、Oracle 存储过程分页1 create PROCEDURE GetPatientVisitData(2 p_HospId IN VARCHAR2, -- 院区编码3 p_strDate IN VARCHAR2, -- 开始日期4 p_endDate IN VARCHAR2, -- 结束日期5 p_page_size IN NUMBER, -- 每页记录数6 p_page_number IN NUMBER, --…

初次使用 Jetbrains Rider 编写 C#(.Net) 代码

Jetbrains Rider 使用前段时间,Jetbrains公司 公布了 Rider IDE 对非商业用途免费,看到很多业界的朋友都用到这个IDE,今天便下载下来使用一下。 1、界面的差异 Rider的界面跟我前段时间学习调试安卓代码的 Android Studio 的界面很像,布局几乎是一样的。 使用习惯了 Visua…

这些实时互动 AI 场景正在涌现生长,也预示着多模态 AI 的未来|RTE2024 声网CEO赵斌演讲实录

10月25日,在 RTE2024 第十届实时互联网大会主论坛上,声网创始人兼 CEO 赵斌发表了《实时互动十年:从 WebRTC 到生成式 AI 时代的 RTE 》主旨演讲。赵斌认为,生成式 AI 正在驱动 IT 行业发生大变革,这一趋势主要体现在四个层面:终端、软件、云以及人机界面。在这样的时代背…

2024网鼎杯-初赛-青龙组

初赛-青龙组题目附件下载: https://pan.baidu.com/s/1VbieB2XhNYtRqfBeLxguYw?pwd=c03iMisc misc02 ​​生蚝:foremost分离,zsteg对最大的png,得到Y3p_Ke9_1s_????? 搜7z找到压缩包,然后掩码爆破,得到flag.txt,然后写脚本爆破。得到字符串我们先用 foremost 分离题…

闲话 11.8

杂项乱写 11.8别问为啥这么晚才写,因为一天都不知道在干啥,要寄的节奏。11.7 晚轮到 CTH 写字Ratio:程立雪?啥意思,程门立雪?门呢? CTH:让我创掉了。上午把昨天晚上想到的题出了出来,见此。 由于 5k 们要打 nfls,所以只能找团委了,过了 hack 之后直接拿 \(\mathcal{…

Hive的搭建

一、上传解压配置环境变量 1.解压 tar -zxvf apache-hive-3.1.2-bin.tar.gz -C ../2.配置环境变量 vim /etc/profile3、重命名 mv apache-hive-3.1.2-bin hive-3.1.24.使环境变量生效 source /etc/profile 二、修改配置文件 1.拷贝一份文件 cp hive-default.xml.template hive-…