我在使用 mingw 时遇到了一个奇怪的异常问题,并设法将其缩减为以下示例:
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
void test(int a) {
if (a < 0) {
throw std::ios_base::failure("a < 0");
}
}
void test_file(std::string const & fName)
{
std::ifstream inF(fName.c_str(), std::fstream::in);
if (!inF) {
cout << "file error -> throwing exception" << endl;
throw ios_base::failure("could not open input file '" + fName + "'");
}
}
int main()
{
try { test(-5); }
catch(std::exception& e) {
cerr << "Exception caught: " << e.what() << " .. continue anyway" <<endl;
}
try { test_file("file-that-does-not-exist"); }
catch(std::exception& e) {
cerr << "Exception caught: " << e.what() << endl;
exit(EXIT_FAILURE);
}
return EXIT_SUCCESS;
}
第一个异常被捕获,但第二个异常没有,所以我收到了漂亮的 Windows 错误框,通知我我的应用程序已停止工作:-( 完整的命令行输出是:
异常捕获:a < 0 .. 仍然继续
文件错误 -> 抛出异常此应用程序已请求运行时以不寻常的方式终止它。请联系应用程序的支持团队以获取更多信息。
其他异常(如 std::runtime_error)也会发生同样的情况。
我做错了什么,还是其他地方的问题?
系统信息:Windows 7 x64,最新的 mingw32(昨天使用 mingw.org 的 mingw-get 重新安装)。
提前非常感谢。
迈克尔