我对 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)
两个版本都可以吗?
两者之间的主要区别在于您可以捕获并处理异常(使用 引发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 后是否调用析构函数?