📜  cerr – C++中的标准错误流对象(1)

📅  最后修改于: 2023-12-03 15:29:57.521000             🧑  作者: Mango

cerr – C++中的标准错误流对象

在 C++ 中,除了常见的 cout 标准输出流对象外,还有一个常用的标准错误流对象 cerr(即 "console error")。与 cout 不同,cerr 的主要作用是输出程序运行过程中的错误信息。

使用方法

与 cout 用法类似,可以使用插入运算符 << 来输出不同类型的数据类型。例如:

#include <iostream>
using namespace std;

int main ()
{
  int num = 42;
  cerr << "An error occurred. Error code: " << num << endl;
  return 0;
}

以上代码会将 "An error occurred. Error code: 42" 输出到屏幕上的错误流中。注意,不同于 cout,cerr 默认不会换行,需要手动插入 endl 或者 '\n' 来进行换行操作。

特点

cerr 除了可以用来输出错误信息外,与 cout 和它定义在同一个头文件 iostream 中的另一个标准流对象 clog 类似,都具有以下特点:

  • 不同于 FILE 操作,cout、cerr、clog 不需要开发者自行关闭流对象。
  • 将上述三个流直接与特定设备关联不能使用 freopen() 函数。作为替代方案,可以使用 rdbuf() 函数将流关联到一个缓存或者使用操作系统提供的重定向特性来将输出数据定向到一个文件中。
  • 标准错误流对象 cerr 不能被重定向。
实例

下面来看一个使用 cerr 输出错误信息的例子。假设有一个函数 double divide(double dividend, double divisor),用来计算两个 double 类型数值的商。当传入的除数 divisor 为零时,将发生错误。这时,可以使用 cerr 输出错误信息,并返回 0 来表示错误:

#include <iostream>
using namespace std;

double divide(double dividend, double divisor) {
    if (divisor == 0.0) {
        cerr << "Error: Division by zero." << endl;
        return 0.0;
    }
    return dividend / divisor;
}

int main() {
    double a = 10.0, b = 0.0;
    double result;

    result = divide(a, b);
    cout << "Result is: " << result << endl;

    return 0;
}

以上示例中,divide 函数在遇到除数为零的情况时使用 cerr 输出错误信息,然后返回 0。在 main 函数中,divide 函数的返回值将作为最终结果被 cout 输出。需要注意的是,如果 divide 函数未遇到除数为零的情况,其返回值将直接被输出,而无需使用 cerr 输出任何信息。