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++ |
功能 | 换行后会自动刷新输出缓冲区 | 换行后不刷新缓冲区,可能还需要自己处理宽字符等事情 |
分类:
language: C++
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 分享4款.NET开源、免费、实用的商城系统
· 解决跨域问题的这6种方案,真香!
· 一套基于 Material Design 规范实现的 Blazor 和 Razor 通用组件库
· 5. Nginx 负载均衡配置案例(附有详细截图说明++)
2020-05-08 素数筛
2020-05-08 POJ:3279-Fliptile【状态压缩】【DFS】