5

下面的简单代码

// 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)

我不明白出了什么问题,有人能指出我正确的方向吗?

4

4 回答 4

8

试一试。_ 你没有抛出任何异常。

throw;本身通常用于在块内重新抛出相同的异常catch

将结果与throw "something";或可能的实例进行比较std::exception

于 2012-07-03T10:20:56.530 回答
7

你的线路

throw;

是在块中重新抛出异常的语法catch

你应该写:

throw std::exception();
于 2012-07-03T10:21:38.797 回答
3

这是标准(15.1)规定的:

8) 没有操作数的 throw 表达式重新抛出当前处理的异常 (15.3)。使用现有临时重新激活异常;没有创建新的临时异常对象。不再认为异常被捕获;因此, std::uncaught_exception() 的值将再次为真。

9) 如果当前没有处理异常,则执行不带操作数的 throw 表达式调用 std::terminate() (15.5.1)。

于 2012-07-03T10:36:53.420 回答
2

throw;它自己会重新抛出当前正在处理的异常,但您的代码中没有异常。

你需要扔东西。尝试类似的东西throw std::runtime_error("my message");。您需要为此包括在内#include <stdexcept>

在实际代码中,您将希望创建自己的异常类以最有可能抛出

于 2012-07-03T10:22:41.327 回答