📅  最后修改于: 2020-09-26 15:52:18             🧑  作者: Mango
clog
和cerr
都与stderr
相关联,但是与cerr
不同之处在于clog
中的流是缓冲的,不会与cout
自动绑定。
缓冲输出比无缓冲输出更有效。对于缓冲输出,所有输出都保存到变量中并一次写入磁盘。对于无缓冲的输出,我们必须继续写入磁盘。
对于严重错误,不建议使用缓冲输出。在系统崩溃的情况下,可能会出现以下情况:输出仍在缓冲区中,并且未写入磁盘,并且错误消息无法检索。在系统崩溃的情况下,我们无法承受丢失错误数据的风险,因此即使速度较慢,我们也会继续将严重错误写入磁盘。
clog
通常用于记录目的。对于非关键事件日志记录,效率更为重要,因此clog
优先于cerr。
extern ostream clog;
它在
确保在第一次构造ios_base::Init
类型的对象期间或之前初始化该clog
对象。 clog
不与任何其他流绑定。
clog中的“ c”表示“字符”,因此clog表示“字符日志”。
阻塞对象与插入运算符 (<<)一起使用,以显示字符流。通用语法为:
clog << varName;
要么
clog << "Some String";
提取运算符可以与变量, 字符串和操纵符 (例如endl
)结合使用多次:
clog << var1 << "Some String" << var2 << endl;
#include
#include
using namespace std;
int main()
{
char fileName[] = "data.txt";
ifstream infile(fileName);
if(infile)
cout << infile.rdbuf();
else
clog << "Error while opening the file " << fileName << endl;
return 0;
}
在此程序中,clog用于流式传输日志数据,因为这种情况下的错误对于应用程序而言并不重要。因此使用缓冲输出的堵塞物更为有效
运行程序时,输出为[如果打开文件时出错]:
Error while opening the file data.txt