gpt4 book ai didi

c++ - 什么决定从 std::endl 输出哪些字节

转载 作者:可可西里 更新时间:2023-11-01 14:43:05 25 4
gpt4 key购买 nike

我有一个大型代码库,它使用 std::cout 来生成它的输出,并且它在所有地方都使用 std::endl 来生成它的换行符。该程序似乎只为 endl 生成换行符,这本身并不是一个大问题,但无论出于何种原因,这都不是我所期望的。

因此,作为现实检查,我构建了一个简单的程序来将 endl 泵入 cout,使用相同的编译器对其进行编译并检查其输出。 那个 程序为 endl 发出 CR 和 LF。

看起来大型程序并没有使用 cout 玩任何游戏来改变 endl 的工作方式,至少我无法识别,所以它的行为与小程序不同似乎很奇怪。似乎大型程序必须做一些事情来改变默认值。我在这里缺少什么?

这两个程序都是在 32 位 Windows 上使用 MinGW gcc 4.5.2 编译的。

最佳答案

补充一下 Tomalak Geret'kal 的回答:endl 扩展到特定于平台的端线这一事实是一个普遍的误解。

在 C/C++ 应用程序中,唯一的“官方”换行符(至少,就流和流相关函数而言)是 '\n'。当以文本模式打开时(即没有ios::bin 标志)。

endl 用于在 '\n' 之后强制进行流刷新;这对于控制台输出很有用,但 (1) 通常情况并非如此(当通过绑定(bind)流机制从 cin 请求输入时,cout 会自动刷新)并且只会浪费 CPU 时间,并且 (2) 您经常会发现它也用于文件流,它几乎从不有用,并且会导致文件写入性能不佳。


  1. 正如评论中所讨论的那样,就标准而言,转换实际上可能发生在流以下的任何级别(例如,流可能会将 ios::bin 的存在/不存在转换为底层操作系统文件管理功能的标志,操作系统负责翻译);实际上,主流操作系统并没有针对这种翻译的特定标志,主要是因为它们的文件 API 与内容无关(你告诉它们要写什么,它们会不加修改地编写)。

关于c++ - 什么决定从 std::endl 输出哪些字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7127931/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com