gpt4 book ai didi

c++ - 捕获所有错误

转载 作者:太空宇宙 更新时间:2023-11-03 10:28:49 27 4
gpt4 key购买 nike

在我的程序中,我想捕获函数中的每个错误。我试过使用 try/catch 但程序仍然存在。我已经建立了一个我想要捕捉的例子

#include <iostream>
#include <stack>

using namespace std;

int main()
{
stack<string> test;
test.push("lel");
try {
test.pop();
test.pop();
}
catch (...) {
cout << "Caught" << endl;
}
return 0;
}

这仍然会导致程序退出。我怎样才能捕捉到任何错误,或者如果不可能捕捉到这个特定错误?

最佳答案

stack::pop() 在堆栈为空时不会抛出任何exception。相反,从空堆栈中弹出是未定义的行为。由于没有抛出异常,您的 catch 子句不能捕获任何东西,而是程序终止(UB 中可能发生任何事情)。

关于您捕获所有错误的意图,我认为在 main 中放置一个 try-catch 来捕获所有错误是一个很好的做法从任何其他地方逃脱,如果异常确实被抛出,您应该能够捕捉到。只需注意一些问题:

  1. 在任何 UB 的情况下,控制可能无法到达您的 catch block 。
  2. C++ 不能同时处理多个异常,在这种情况下程序很可能会在它发生的地方终止(特别小心,这样异常就不会留下任何析构函数)。
  3. 抛出不在函数的异常规范列表中的异常(很可能程序将终止)。

关于c++ - 捕获所有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24107455/

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