c ++琐碎的try-catch导致中止

时间:2012-07-03 10:19:39

标签: c++

下面的简单代码

// 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 个答案:

答案 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>

在实际代码中,您需要创建自己的异常类以抛出最可能的