我要用cerr吗?

时间:2011-02-20 17:34:06

标签: c++

在下面描述的情况下是否使用cerr?

try
    {
    cout << a + b;
    }
    catch(const IntException& e)
    {
        cerr << "Exception caught: " << typeid(e).name(); //using cerr not cout
    }
    catch(...)
    {
        cerr << "Unknown exception.";//using cerr not cout
    }
应该使用

还是cout?请参阅代码中的注释。

4 个答案:

答案 0 :(得分:19)

stderr是发送错误消息的传统流(因此OS / shell /可以捕获与“正常”输出分开的错误消息),所以是的,使用std::cerr

我没有评论是否只是为了打印它而捕获异常比简单地让异常传播出你的应用程序更好......

答案 1 :(得分:5)

是的,因为默认情况下它们都会转到终端,您可以更改其输出定向的位置,并且您可能希望cerr转到日志文件,cout继续前进到stdout

基本上,如果您现在或将来想要它,它可以让您更好地控制不同输出的位置。

答案 2 :(得分:1)

当然,在那里使用cerr是件好事。您可以以不同于cout的方式重定向cerr,有时可以帮助您突出显示可能隐藏在巨大的cout日志文件中的问题。

答案 3 :(得分:1)

要记住的一个细节是将输出直接发送到终端(使用cout或cerr),您的确会限制测试错误消息的能力。总是值得提出一个问题“如何对此进行单元测试?”。