众所周知,endl和’\n’都有换行的作用,但两者是有区别的。

每一个输出流都有一个缓冲区,用来保护程序读写的数据。执行下面的代码:

#include <iostream>int main() {std::cout << "Hello world!" << std::endl;return 0;
};

"Hello World!"会被立即打印出来,这里的输出流对象是cout,但如果不用endl

#include <iostream>int main() {std::cout << "Hello world!\n";return 0;
};

文本可能在执行完这条语句后立即打印出来,但也可能被保存在缓冲区中。操作系统可能会将多个输出操作组合成一次写操作。可以理解为每输出一次操作系统都要进行一次写操作,不如先放在缓冲区,到时写一次搞定,提高性能。

cout << '\n’的作用就只是单纯地输出换行符,而endl的作用是输出一个换行符,并刷新缓冲区,输出的内容会立刻打印。

导致缓冲区刷新的原因有

程序正常结束,比如在main函数return后,系统隐式调用**exit(0)**退出程序

#include <iostream>int main() {std::cout << "hello world"; return 0; //此时缓冲区没满,但程序结束导致其刷新
};

缓冲区满时

#include <iostream>int main() {std::cout << "hello";std::cout << "hello";std::cout << "hello";std::cout << "hello";std::cout << "hello"; //假如缓冲区可能在这里刚好就满了,刷新,并打印前五个hellostd::cout << "hello"; std::cout << "hello";return 0;  //程序结束,缓冲区刷新,并打印后两个hello
};

unitbuf设置流的内部状态后每次的输出操作

#include <iostream>int main() {std::cout << std::unitbuf;std::cout << "hello"; //刷新,并立即打印std::cout << "hello"; //刷新,并立即打印std::cout << "hello"; //刷新,并立即打印return 0;  //刷新
};

被关联的流刷新,默认cin和cerr都关联到cout

#include <iostream>int main() {int n;std::cout << "hello"; //假如缓冲区在这里没满,不刷新std::cin >> n; //cin是默认关联cout的,执行cin操作会刷新cout缓冲区,故hello立即被打印在屏幕上return 0;
};

举个例子,你可能就懂了。

假如正常情况下,缓冲区满了才会打印内容到屏幕上:

#include <iostream>int main() {int n = 0;std::cout << "hello"; //假如缓冲区从这里开始是空的,把"hello"放进去也没满n = 1;std::cout << "world"; //假如再把"world"放进去刚好满了,缓冲区在这里刷新n = 2;return 0;
};

程序会在执行完 std::cout << "world" 操作之后才把 helloworld 一起打印出来。所以 hello 是在 n = 1 之后打印到屏幕上的。

求点赞、收藏!!!
作者水平有限,如果有误,欢迎指正!
编译环境:Visual Studio 2019

一文带你了解c++使用endl和使用‘\n‘的区别相关推荐

  1. 一文带你彻底搞懂i++和++i的区别,谁的效率更高?

    作者简介:Codebowl靓仔,学妹的工具人,C++开发误入数据开发,梦想30岁退休的靓仔就是我啦. i++和++i对于初学者来说,一直是一个特别容易搞混的内容,相信很多人现在也没有完全搞清(作者初学 ...

  2. linux awk语法格式,Awk是什么?一文带运维小白快速掌握Linux Awk用法

    原标题:Awk是什么?一文带运维小白快速掌握Linux Awk用法 作者:a8 Awk.sed与grep,俗称Linux下的三剑客,它们之间有很多相似点,但是同样也各有各的特色,相似的地方是它们都可以 ...

  3. DNN、RNN、CNN.…..一文带你读懂这些绕晕人的名词

    DNN.RNN.CNN.-..一文带你读懂这些绕晕人的名词 https://mp.weixin.qq.com/s/-A9UVk0O0oDMavywRGIKyQ 「撞脸」一直都是娱乐圈一大笑梗. 要是买 ...

  4. 一文带你深入理解JVM内存模型

    一文带你深入理解JVM内存模型 一.JAVA的并发模型 共享内存模型 在共享内存的并发模型里面,线程之间共享程序的公共状态,线程之间通过读写内存中公共状态来进行隐式通信 该内存指的是主内存,实际上是物 ...

  5. 训练的神经网络不工作?一文带你跨过这37个坑

    近日,Slav Ivanov 在 Medium 上发表了一篇题为<37 Reasons why your Neural Network is not working>的文章,从四个方面(数 ...

  6. 还不会ts?一文带你打开ts的大门

    一文带你打开ts的大门 序言 一.什么是TypeScript? 1.编程语言的类型 2.TypeScript究竟是什么? 二.为什么要学习TypeScript? 1.程序更容易理解 2.效率更高 3. ...

  7. 一文带你了解Java Agent

    转载自  一文带你了解Java Agent Java Agent这个技术,对于大多数同学来说都比较陌生,像个黑盒子.但是多多少少又接触过,实际上,我们平时用的很多工具,都是基于Java Agent实现 ...

  8. 一文带你理解Java中Lock的实现原理

    转载自   一文带你理解Java中Lock的实现原理 当多个线程需要访问某个公共资源的时候,我们知道需要通过加锁来保证资源的访问不会出问题.java提供了两种方式来加锁,一种是关键字:synchron ...

  9. pyecharts对于经纬度_一文带你掌握Pyecharts地理数据可视化的方法

    本文主要介绍了Pyecharts地理数据可视化,分享给大家,具体如下: 一.Pyecharts简介和安装 1. 简介 Echarts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计, ...

最新文章

  1. 查找手机型号云服务器,查找手机型号云服务器
  2. linux c 进程间通信
  3. JavaScript多文件下载
  4. C指针原理(35)-Ncurses-文本终端的图形
  5. 数据结构(二)--队列
  6. java oo 封装_javaOO——封装、static、成员内部类
  7. 价格优化与定价管理软件行业调研报告 - 市场现状分析与发展前景预测
  8. 状态机(FSM)的介绍--以检测序列1001为例
  9. html5在线表格生成器,js简单实现自动生成表格功能示例
  10. 斯皮尔 皮尔森 肯德尔_科学网-在SPSS软件相关分析中,pearson(皮尔逊), kendall(肯德尔) 和spearman(斯伯曼/斯皮尔曼)三种相关分析方法有什么异同(转)-刘斌的博文...
  11. 计算机技术在生物学中的应用鲁东大学,生物科学与技术学院
  12. 震惊!世界海底光缆分布图!
  13. 最佳实践|如何写出简单高效的 Flink SQL?
  14. Java计算机毕业设计图书馆座位预约管理系统源码+系统+数据库+lw文档
  15. python恶搞代码打开对方摄像头_用Python获取摄像头并实时控制人脸的实现示例
  16. WEB短信平台定制 短信系统构建 路由通道搭建 web版短信后台管理系统 概括简介
  17. kubernetes学习:4.安装kubectl命令
  18. 如何运行Android模拟器
  19. 基于web的IT技术论坛
  20. KYOCERA Programming Contest 2021 (AtCoder Beginner Contest 200) A~E 题解

热门文章

  1. 跟我一起写 Makefile
  2. Poker time 2 (enhanced version)
  3. WPF 制作带TreeView的ComBox
  4. vue拍照功能PC+手机需要的可以看一下
  5. 【BZOJ】【P1135】【POI2009】【Lyz】【题解】【线段树+Hall定理】
  6. android 距离传感器 api,Android传感器API之:近距离感应Proximity功能源码
  7. mysql修改密码及变更权限
  8. SIGMOD 2021 | 时间序列相关论文一览(附原文源码)
  9. 领英精灵使用手册,功能介绍
  10. Cocos2d-html5《王者之剑》实现 (1)