【发布时间】:2019-10-17 18:16:11
【问题描述】:
我对 C++ 比较陌生,我只是想知道,仅抛出异常或编写 std::cerr 和 exit() 之间的主要区别是什么?我知道如果没有捕获到异常,程序将退出。 std::cerr 是否有任何用例,还是我应该总是抛出异常?或者我一般不应该使用 std::cerr 吗?对此有一些最佳做法吗?
throw std::runtime_error("runtime error msg");
或
std::cerr << "cerr error msg";
exit(1);
两个版本都可以吗?
【问题讨论】:
-
不同的是可以捕获异常。它不一定会结束你的程序,只有在没有人捕捉到它的情况下。
-
视情况而定。如果您有任何机会调用者可以纠正导致错误发生的任何原因,那么使用异常可能会更好(如果调用者没有捕获并处理异常,这将导致终止)。如果调用者纠正错误原因的可能性为零,那么退出比抛出异常要好。 [注意:在多线程程序中,不应调用
exit()]。 -
您有多个问题。请为此问题选择“例外与退出”或“如何/何时使用
std::cerr”,并将另一个移至新问题。 (既然已经有了答案,你应该保留与之匹配的问题。)如果你不明白为什么这些问题是独立的,请考虑代码std::cerr << "cerr error msg"; throw std::runtime_error("runtime error msg");。