为什么cerr输出比cout快

Why cerr output faster than cout?

本文关键字:cout 输出 cerr 为什么      更新时间:2023-10-16

使用cout需要多一点时间来输出语句,这对我来说不太好。但使用cerr时输出更快。为什么?

只是想提供帮助:-cout->常规输出(控制台输出)-cerr->错误输出(控制台错误)

cout是缓冲的,cerr不是,所以在大多数情况下cout应该更快。(尽管如果你真的关心速度,像printf这样的C输出函数往往比cout/cerr快得多)。cout和cerr是ostream对象。您可以对它们调用rdbuf(),以便从应用程序内部将它们的输出独立重定向到任何需要的位置。如果您愿意,您可以打开一个网络套接字,将其封装在流缓冲区中并重定向到那里。

默认情况下,cout与应用程序的标准输出绑定。默认情况下,标准输出为屏幕。您可以指示操作系统将stdout重定向到其他地方。或者它可以自己做——例如,Linux中的nohup实用程序就是这样做的。我认为,Windows中的服务也会重定向其标准流。

而且,cerr与应用程序的标准错误有关。默认情况下,标准错误是屏幕。您可以再次将stderr重定向到其他位置。这里的另一个问题是,默认情况下,阻塞是像cout一样缓冲的,而cerr是单元缓冲的,这意味着它在每次完成输出操作后都会自动调用flush()。这非常有用,因为这意味着如果应用程序随后直接崩溃,则输出不会在缓冲区中丢失。

如果您运行这样的程序:yourprog>yourfile

你给cout写的东西会进入你的档案。你给cerr写的东西会出现在你的屏幕上。这通常是件好事。我可能不希望您的错误消息与程序输出混杂在一起。(尤其是当您的一些错误消息只是警告或诊断信息时)。也可以将cout重定向到1个文件,将cerr重定向到另一个文件。这是一个方便的范例:我运行你的程序,将输出重定向到一个文件,将错误消息重定向到另一个文件。如果您的程序从main返回0,那么我知道处理输出文件是可以的。如果它返回错误代码,我知道不要处理输出文件。错误文件会告诉我出了什么问题。

参考:-http://www.tutorialspoint.com/cplusplus/cpp_basic_input_output.htm-http://cboard.cprogramming.com/cplusplus-programming/91613-cout-cerr-clog.html