下面的简单代码
// g++ centro.cc -o centro
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
try
{
cout << "Going to throw" << endl;
throw;
}
catch(...)
{
cout << "An exception occurred" << endl;
}
return 0;
}
产生中止:
Going to throw
terminate called without an active exception
Aborted (core dumped)
我不明白什么是错的,有人能指出我正确的方向吗?
答案 0 :(得分:8)
尝试使用某些东西。你没有抛出任何例外。
throw;
本身通常用于在catch
块内重新抛出相同的异常。
将结果与throw "something";
或std::exception
的实例进行比较。
答案 1 :(得分:7)
你的行
throw;
是在catch
块中重新抛出异常的语法。
你应该写:
throw std::exception();
答案 2 :(得分:3)
这是标准(15.1)规定的:
8)没有操作数的throw-expression重新抛出当前处理的内容 例外(15.3)。使用现有的重新激活例外 临时;没有创建新的临时异常对象。例外 不再被认为被抓住;因此,价值 std :: uncaught_exception()将再次成为现实。
9)如果没有 目前正在处理异常,执行throw-expression 没有操作数调用std :: terminate()(15.5.1)。
答案 3 :(得分:2)
throw;
自行重新抛出当前正在处理的异常,但代码中没有异常。
你需要扔东西。尝试使用类似throw std::runtime_error("my message");
的内容。您需要为此添加#include <stdexcept>
。
在实际代码中,您需要创建自己的异常类以抛出最可能的