C++ 的两种换行符区别
当我们在C++执行一个输出语句时,在输出语句最后可以使用 std::endl 或 \n 建立一个新行。
但这两种换行方式对程序有不同的影响。
std::endl
它在建立一个新的行的同时,还会自动刷新输出缓冲区flush( )。
\n
它仅仅是建立一个新的行,并不会刷新输出缓冲区。
下面看一段小程序:
#include<iostream>
int main(void)
{
std::cout<<"Testing 1"<<std::endl;
std::cout<<"Testing 2"<<'\n';
return 0;
}
这个程序的输出结果为;
Testing 1
Testing 2
从表面上看 std::endl 和 \n 是没有区别的,因为刷新输出缓冲区属于流的内部处理,无法显性表示。而且由于程序正常结束时会自动关闭流,这两者的区别就更难被体现出来了。
但是如果程序异常结束时就会看出区别所在:
\n不刷新流,程序异常结束时文件会不完整std::endl会刷新流,即使程序异常结束文件也会保持完整
一般而言 std::endl 的功能是比 \n 要优越的,在写C++程序推荐使用。
总结
std::endl = flush + \n
| 比较 | std::endl | \n |
|---|---|---|
| 本质 | 是一个指针函数,cout会调用其所指的函数 | 是一个转义字符 |
| 适用范围 | 源于C++标准库,是类成员,只能用于C++ | 可用于C和C++ |
| 功能 | 换行后会自动刷新输出缓冲区 | 换行后不刷新缓冲区,可能还需要自己处理宽字符等事情 |
C++ 的两种换行符区别的更多相关文章
- Java中serialVersionUID的解释及两种生成方式的区别(转载)
转载自:http://blog.csdn.net/xuanxiaochuan/article/details/25052057 serialVersionUID作用: 序列化时为了保持版 ...
- jsp中两种include的区别【转】
引用文章:http://www.ibm.com/developerworks/cn/java/j-jsp04293/ http://www.cnblogs.com/lazycoding/archive ...
- UIImage两种初始化的区别
UIImage可以通过以下两种方式进行初始化: //第一种初始化方式:[注意使用这种初始化的时候如果是png格式的可以不给后缀名,根据屏幕的的分辨率去匹配图片] UIImage *image = [U ...
- PHP中数组合并的两种方法及区别介绍
PHP数组合并两种方法及区别 如果是关联数组,如下: 复制代码代码如下: $a = array( 'where' => 'uid=1', 'order' => 'uid', ); $b = ...
- Android小项目之九 两种上下文的区别
------- 源自梦想.永远是你IT事业的好友.只是勇敢地说出我学到! ---------- 按惯例,写在前面的:可能在学习Android的过程中,大家会和我一样,学习过大量的基础知识,很多的知识点 ...
- ACE_linux:Reactor与Proactor两种模式的区别
一.概念: Reactor与Proactor两种模式的区别.这里我们只关注read操作,因为write操作也是差不多的.下面是Reactor的做法: 某个事件处理器宣称它对某个socket上的读事件很 ...
- 什么是CS和BS结构,两种结构的区别
什么是CS和BS结构,两种结构的区别 什么是C/S和B/S结构? C/S又称Client/Server或客户/服务器模式.服务器通常采用高性能的PC.工作站或小型机,并采用大型数据库系 ...
- Ajax的get和post两种请求方式区别
Ajax的get和post两种请求方式区别 (摘录):http://ip-10000.blog.sohu.com/114437748.html 解get和post的区别. 1. get是把参数数据队列 ...
- 关于网页授权的两种scope的区别说明
关于网页授权的两种scope的区别说明 1.以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的.用户感知的就是直接进入了回 ...
- Redis持久化的两种方式和区别
该文转载自:http://www.cnblogs.com/swyi/p/6093763.html Redis持久化的两种方式和区别 Redis是一种高级key-value数据库.它跟memcached ...
随机推荐
- QT实战 之翻金币游戏
QT实战 之翻金币游戏 相较于原版的优化: 关卡数据不是用静态的config配置,而是动态生成,每次打开的关卡都生成不同的游戏数据,增加了可玩性: 关卡数据依据关卡等级的不同而生成不同难度的数据,随关 ...
- 轻松应对复杂集成场景!用友U8API开发适配
在企业上云的大趋势下,U8+ 全面转向互联网方向,深入融合云应用,一站式提供财务.营销.制造.采购.设计.协同.人力等领域的"端 + 云"服务,并通过软硬一体化.产业链协同的策略全 ...
- python3 打包上传pypi失败及解决方法
1.打包及上传 1.1.安装构建和打包工具 pip3 install build # 构建包的工具 pip3 install twine # 上传包的工具 pip3 install wheel #he ...
- 快速认识,前端必学编程语言:JavaScript
JavaScript是构建Web应用必学的一门编程语言,也是最受开发者欢迎的热门语言之一.所以,如果您还不知道JavaScript的用处.特点的话,赶紧补充一下这块基础知识. JavaScript 是 ...
- MVC控制器传DataTable
MVC中,控制器return Json(DataTable)会出现错误: 序列化类型为"System.Reflection.RuntimeModule"的对象时检测到循环引用. 解 ...
- 常见速率协议的CDR带宽情况
100G PAM4 4MHZ 802.3/OIF-CEI 50G PAM4 4MHZ 802.3/OIF-CEI 28G PAM4 4MHZ 802.3/OIF-CEI 28G PAM4 4MHZ 8 ...
- C# 常量 结构体 委托
常量 const double PI = 3.1415926; 常量名命名一般使用大写字母 枚举类型 开发一个游戏,游戏角色有法师(Mage).射手(Archer).刺客(Assassin).坦克(T ...
- 实践篇:1 虚拟机使用rmp方式安装部署GitLab-ce
01 环境准备 电脑:MAC Air 虚拟机:VMware Fusion 12.2.3 Linux环境:CentOS 7 02 rpm方式安装部署GitLab服务 步骤1:centos 7 安装wge ...
- 神经网络优化篇:详解梯度的数值逼近(Numerical approximation of gradients)
在实施backprop时,有一个测试叫做梯度检验,它的作用是确保backprop正确实施.因为有时候,虽然写下了这些方程式,却不能100%确定,执行backprop的所有细节都是正确的.为了逐渐实现梯 ...
- 【推荐】Helix 常用命令与设置
目录 Helix常用命令 配置 编辑器 [editor]字段 [editor.statusline] 字段 [editor.lsp] 字段 [editor.cursor-shape] 字段 [edit ...