首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C ++:“std :: endl”vs“\ n”

C ++:“std :: endl”vs“\ n”
EN

Stack Overflow用户
提问于 2019-06-12 07:08:16
回答 2查看 0关注 0票数 0

许多C ++书籍包含这样的示例代码......

std::cout << "Test line" << std::endl;

......所以我也一直这样做。但我已经看到很多来自像这样的开发人员的代码:

std::cout << "Test line\n";

是否有技术上的理由偏爱另一个,或者仅仅是编码风格的问题?

EN

Stack Overflow用户

发布于 2019-06-12 16:38:44

我记得在标准中读过这个,所以这里是:

请参阅C11标准,该标准定义了标准流的行为方式,因为C ++程序与CRT接口,C11标准应该在此处管理刷新策略。

ISO / IEC 9899:201x 7.21.3 §7 在程序启动时,预定义了三个文本流,无需明确打开 - 标准输入(用于读取常规输入),标准输出(用于写入常规输出)和标准错误(用于写入诊断输出)。最初打开时,标准错误流未完全缓冲; 当且仅当可以确定流不参考交互设备时,标准输入和标准输出流被完全缓冲。 7.21.3 §3 当流未缓冲时,字符应尽快从源或目的地出现。否则,可以将字符作为块累积并发送到主机环境或从主机环境发送。当流被完全缓冲时,当填充缓冲区时,字符将作为块传输到主机环境或从主机环境传输。当流被线缓冲时,当遇到换行符时,字符将作为块传输到主机环境或从主机环境传输。此外,当填充缓冲区,在无缓冲流上请求输入时,或者在需要从主机环境传输字符的行缓冲流上请求输入时,字符旨在作为块传输到主机环境。 。

这意味着,std::coutstd::cin是完全缓冲当且仅当他们所指的非交互设备。换句话说,如果stdout附加到终端,则行为没有差异。

但是,如果std::cout.sync_with_stdio(false)被调用,则'\n'即使对交互设备也不会导致刷新。否则'\n'相当于std::endl除非管道到文件:c ++ ref on std :: endl

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100001251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档