c ++异常裸抛

时间:2012-08-26 18:58:52

标签: c++ windows visual-c++ exception try-catch

  

可能重复:
  What is the difference between throw and throw with arg of caught exception?
  Does catch (…) work on throw; with no object?

这会崩溃:

try
{
    if(1)
        throw;
}
catch(...)
{
    printf("hi");
}

我以为我能做到,但我猜不是。当你不需要任何信息时,什么是正确的投掷方式?

2 个答案:

答案 0 :(得分:6)

“裸投”重新抛出已经被捕获的异常。如果没有什么可以重新抛出,那就行不通了。

你可以扔掉任何东西,比如throw "Error!";,即使它不是太有用。否则你可以尝试

if (x == 1)
    throw std::runtime_error("x == 1 is not a good value here")`.

答案 1 :(得分:1)

#include <exception>

try
{
    if(1)
        throw std::exception();
}
catch(...)
{
    printf("hi");
}

这可能会更好,取决于您的目标:

class my_exception : public std::exception {};

然后,

try
{
    if(1)
        throw my_exception();
}
catch(my_exception)
{
    printf("hi");
}