提问人:Enlico 提问时间:8/13/2023 最后编辑:Remy LebeauEnlico 更新时间:8/13/2023 访问量:173
为什么“std::cout << char() << std::endl;”甚至没有在编译器资源管理器上打印新行?
Why does "std::cout << char() << std::endl;" not even print a new line on Compiler Explorer?
问:
此代码:
#include <iostream>
int main() {
std::cout << "---" << std::endl;
std::cout << char() << std::endl;
std::cout << "---" << std::endl;
}
打印以下内容:
---
---
为什么不在其他两个之间产生一条新行?std::endl
删除使输出成为我所期望的:char() <<
---
---
答:
4赞
user17732522
8/13/2023
#1
该代码将导致标准库将空字符后跟换行符打印到流中。
如何呈现这些字符取决于您用于查看流内容的终端或其他 UI。
我通常希望终端跳过 null 字符作为不可打印,并像往常一样解释换行符。但是,我认为没有任何标准或规范要求这种行为。
在这个具体案例中,我怀疑编译器资源管理器如何呈现输出存在错误,可能是在基于 https://github.com/rburns/ansi-to-html 的 AnsiToHtml 中,用于格式化包含 ANSI 转义代码的编译器的输出。该库对输入进行了一些标记化,因此此类错误似乎并非不可能,但是我没有足够的JavaScript / TypeScript来快速浏览一下。
评论
sh
bash
zsh