C++ cerr 对象

定义和用法

cerr 对象用于输出错误消息。其行为与 cout 相同,但可以定向到不同的目的地,如错误日志文件。cerrclog 总是写入相同的目的地。

有关更详细的用法,请参阅 <iostream> 中的 cout 对象。

coutclog 不同,cerr 是不带缓冲的。带缓冲的输出会暂时将输出存储在变量中,直到满足某些条件时才写入目的地。带缓冲的输出更高效,因为它们对文件执行的写操作更少。cerr 是不带缓冲的,以便在程序崩溃之前将错误消息写入文件。

注意:cerr 对象在 <iostream> 头文件中定义。

实例

例子 1

使用 cerr 对象输出错误消息:

int x = 5;
int y = 0;

if(y == 0) {
  cerr << "除零错误: " << x << " / " << y << "\n";
} else {
  cout << (x / y);
}

亲自试一试

例子 2

cerr 定向到文件而不是控制台:

#include <iostream>
#include <fstream>
using namespace std;

int main() {
  int x = 5;
  int y = 0;

  // 将 "error.log" 设置为错误消息的输出文件
  ofstream log("error.log");
  cerr.rdbuf(log.rdbuf());
  
  // 写入错误消息
  if(y == 0) {
    cerr << "除零错误: " << x << " / " << y << "\n";
  } else {
    cout << (x / y);
  }

  // 关闭文件
  log.close();
  
  return 0;
}