为什么cerr输出比cout更快?

时间:2016-01-07 19:25:12

标签: c++

使用cout需要更多的时间来输出对我不利的语句。但是当使用cerr时输出更快。为什么?

1 个答案:

答案 0 :(得分:4)

试图帮助: - cout - >常规输出(控制台输出) - cerr - >错误输出(控制台错误)

cout是缓冲的,cerr不是,因此在大多数情况下cout应该更快。 (虽然如果你真的关心速度,那么像printf这样的C输出函数往往比cout / cerr快很多)。 cout和cerr是ostream对象。您可以在它们上面调用rdbuf(),以便在应用程序中的任何位置独立地重定向它们的输出。如果需要,您可以打开网络套接字,将其包装在流缓冲区中并重定向到那里。

默认情况下,cout与应用程序的标准输出相关联。默认情况下,标准输出是屏幕。您可以指示操作系统将stdout重定向到其他位置。或者它可以自己完成 - 例如,Linux中的nohup实用程序。我认为,Windows中的服务也会重定向其标准流。

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

如果你运行这样的程序: yourprog>你的文件

你写给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