我应该使用 std::cerr 和 exit() 而不是抛出异常吗?

Tur*_*uke 4 c++ exception

我对 C++ 比较陌生,我只是想知道,仅抛出异常或编写 std::cerr 和 exit() 之间的主要区别是什么?我知道如果没有捕获异常,程序将退出。std::cerr 是否有任何用例,或者我应该始终抛出异常?或者我一般不应该使用 std::cerr ?有一些最佳实践吗?

throw std::runtime_error("runtime error msg");
Run Code Online (Sandbox Code Playgroud)

或者

std::cerr << "cerr error msg";
exit(1);                      
Run Code Online (Sandbox Code Playgroud)

两个版本都可以吗?

Kor*_*elK 5

两者之间的主要区别在于您可以捕获并处理异常(使用 引发throw)。此操作有两个优点:

答:您可以抛出异常并处理它,而不会导致程序崩溃。

B. 当处理异常时,它们会自动调用你的对象的析构函数。例如:

try {
    A a;
    throw runtime_error("A"); // Throw exception A
} catch (...) { // Catch exception A & Call a's object destructor.
    throw runtime_error("B"); // Throw exception B and crush (if no one else catch it).
}
Run Code Online (Sandbox Code Playgroud)

如果您考虑将来处理此代码(或者如果其他人需要继续处理此代码),您需要使用 thethrow而不是 the选项。exit(1)

有关更多详细信息,请参阅:调用 exit() 时析构函数是否运行?& C++ 中的 throw 后是否调用析构函数?