C++ cerr和clog之间的区别
在C++中,输入和输出是以字节序列的形式进行的,通常称为流。cerr和clog都关联着标准C错误输出流stderr,但cerr 是未缓冲的标准错误流,而clog是带缓冲的标准错误流。在本文中,我们将详细介绍这两个流的区别,并通过实例加以说明。
cerr: 它是未缓冲的标准错误流,用于输出错误。这是 ostream 类的一个对象,类似于 cout 。它是未缓冲的,即当需要立即显示错误消息时使用。由于没有缓冲区,因此它无法存储错误消息以便稍后显示。因此,简单地说, cerr 是未缓冲的,它无法存储消息。
示例:
// c++ program to implement
// the above approach
#include <iostream>
using namespace std;
// Driver code
int main()
{
cerr << "the message displayed is unbuffered";
return 0;
}
输出:
clog: 它是带缓冲的标准错误流,用于输出错误。这也是 ostream 类的一个对象,类似于 cout 。它是带缓冲的,即首先将错误消息插入缓冲区,然后将其显示在屏幕上。由于存在缓冲区,因此它可以存储错误消息以便稍后显示,与 cerr 不同。因此,简单地说, clog 是带缓冲的,它无法立即显示消息。 clog 通常用于记录目的。对于非关键事件记录,效率更重要,因此首选 clog 而不是 cerr 。
示例:
// C++ program to implement
// the above approach
#include <iostream>
using namespace std;
// Driver code
int main()
{
clog << "the message displayed is buffered";
return 0;
}
输出:
区别表:
ID | cerr | clog |
---|---|---|
1. | 它是一个不带缓冲的标准错误流 | 它是一个带缓冲的标准错误流 |
2. | 它用于显示错误。 | 它用于日志记录。 |
3. | 它用于立即显示消息。 | 它不能立即显示消息。 |
4. | 它不能存储消息以便以后显示。 | 它可以将消息存储在缓冲区中以便以后显示。 |
5. | cerr中的“c”表示“字符”,’err’表示“错误”,因此cerr表示“字符错误”。 | clog中的“c”表示“字符”,’log’表示“日志记录”,因此clog表示“字符日志记录”。 |
6. | 它比clog不够高效,因为它是未缓冲的输出。 | 它比cerr更高效,因为它是带缓冲的输出。 |
7. | 它适用于严重错误(可能导致系统崩溃的错误)。 | 它不适用于严重错误(可能导致系统崩溃的错误)。 |