跳到主要内容

C++ cerr 流

C++ 中的 cerr 对象用于打印错误消息。它定义在 iostream 头文件中。

示例

#include <iostream>
using namespace std;

int main() {
// 打印错误消息
cerr << "Error!!";
return 0;
}

// 输出:Error!!

cerr 语法

cerr 的语法是:

cerr << var_name;

cerr << "一些字符串";

其中,

  • << 是插入操作符
  • var_name 通常是一个变量,但也可以是数组元素或容器(如向量、列表、映射等)的元素。

cerr 与插入操作符

cerr 中的 "c" 代表 "字符""err" 意为 "错误"。因此 cerr 意为 "字符错误"

cerr 对象与插入操作符 << 结合使用,以显示错误消息。例如,

int var1 = 25, var2 = 50;

cerr << var1;
cerr << "一些字符串";
cerr << var2;

<< 操作符可以与变量、字符串和操作符(如 endl)组合多次使用:

cerr << var1 << "一些字符串" << var2 << endl;

虽然我们可以使用 cout 显示错误以调试程序,但使用 cerr 显示错误始终是个好习惯。

这是因为我们可以将错误流重定向到文件中,而不是将错误显示在屏幕上。

示例:C++ cerr

在此程序中,我们将尝试读取 data.txt 文件的内容。假设这个文件不存在,或者存在无法打开的错误。

在这里,我们将使用 cerr 对象通知用户这一错误。

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

int main() {
string file_name = "data.txt";
ifstream my_file(file_name);

if(my_file) {
cout << my_file.rdbuf();
}
else {
// 打印错误消息
cerr << "打开文件 " << file_name << " 时出错";
}

return 0;
}

输出

打开文件 data.txt 时出错

cerr 原型

定义在 iostream 头文件中的 cerr 原型是:

extern ostream cerr;

C++ 中的 cerr 对象是 ostream 类的一个对象。它与标准 C 错误输出流 stderr 关联。

cerr 对象在第一次构造 ios_base::Init 类型的对象期间或之前确保初始化。

cerr 对象构造后,表达式 (cerr.flags & unitbuf) 非零,这意味着发送到这些流对象的任何输出都会立即刷新到操作系统。

此外 cerr.tie() == &cerrcerr.tie() 返回 &cerr,这意味着在 cerr 上的任何输出操作之前都会执行 cerr.flush()