gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 01:20:47 50 4
gpt4 key购买 nike

我是 C++ 的新手,我只是想知道,抛出异常或编写 std::cerr 和 exit() 之间的主要区别是什么?我知道如果没有捕获到异常,程序就会退出。 std::cerr 是否有任何用例,或者我应该总是抛出异常?或者我应该永远不要使用 std::cerr 吗?对此有一些最佳做法吗?

throw std::runtime_error("runtime error msg");

std::cerr << "cerr error msg";
exit(1);

两个版本都可以吗?

最佳答案

两者之间的主要区别在于,您可以捕获和处理异常(通过 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).
}

如果您考虑将来处理此代码(或者如果其他人需要继续您的处理此代码)。

更多详情请参阅:Are destructors run when calling exit()? & Are destructors called after a throw in C++?

关于c++ - 我应该使用 std::cerr 和 exit() 而不是抛出异常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56406228/

50 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com