gpt4 book ai didi

c++ - 在Visual Studio 2019中处理异常

转载 作者:行者123 更新时间:2023-12-02 10:13:06 27 4
gpt4 key购买 nike

我正在尝试处理Visual Studio Community 2019中的异常,请注意,我不确定我的设置是否有错误或者是由于我的代码而引起的。
我正在尝试处理的异常是out_of_range。为了做到这一点,我将其放入try块并捕获,但是我无法处理。
程序运行时,将提示一个窗口:调试断言失败!
表达载体下标超出范围

#include <iostream>
#include <vector>
#include <stdexcept>

using namespace std;
int main() {


try {
cout << "throwing exception: \n";
throw 1;
}
catch (int i) {
cout << "exception happended!\n";
}
cout << "out of exception\n";
vector<int> v;
try {
cout << "throwing exception2: \n";
v[2];
}
catch (out_of_range e) {
cout << "Exception out of range\n";
cout << e.what();
}
catch (exception& d) {
cout << "General Exception\n";
cout << d.what();
}
catch (...) {
cout << "special excpetinon\n";
}
cout << "Exception handled!";
}
我能够处理的第一个异常并使程序继续运行,而在第二个异常中,程序停止运行并显示错误窗口。
我使用默认设置在 Debug模式下运行该程序:
VS Exception Settings
我想以与第一个相同的方式处理第二个异常。
谢谢!

最佳答案

Debug Assertion Failed! Expression vector subscript out of range


也不异常(exception)。这就是调试器告诉您的程序超出范围并停止了您,因此您可以检查该程序并了解它是如何发生的,以防止该程序超出范围。你抓不到。您需要修复允许程序访问无效内存的错误。
C++的政策是不向程序支付任何未明确要求的费用。在这种情况下,允许抛出可捕获异常的必要检查会使程序变慢,因此 [] 运算符不会执行任何检查1。您可以获得更快的程序,但程序员必须保证该程序永远不会超出范围。
std::vector::at 方法会检查并抛出异常,但是通过使用 at,您选择了使用速度稍慢的程序。
1不需要任何检查是一种更好的措词。在这种情况下,默认情况下会检查MicroSoft标准库实现的调试版本中的 vector实现,并且“调试声明失败!”消息是直接结果。调试版本经过优化,使调试更容易且速度很慢。在发布库中不会进行此检查,因为发布版本针对性能进行了优化。

关于c++ - 在Visual Studio 2019中处理异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62841830/

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