c++ - 如果我不告诉要在 C++ 中抛出什么类型的对象,throw 语句会抛出什么?

标签 c++ exception-handling

以下代码异常终止,因为没有明确抛出对象。下面代码中的throw语句抛出什么?

int main()
{
  try{
  cout<<"try";
  throw ;
}
catch(...){
 cout<<"catch";
 }
return 0;
}

最佳答案

不带参数的

throw 只能在 catch 语句中使用,以重新抛出捕获的异常对象。您的代码尝试在 catch 语句之外使用它 - 相反,您应该选择一个类型来抛出,如果有疑问,从 std::runtime_error 开始并不是不合理的。有关更多选项,请参阅 here .您也可以抛出自己的类型,但通常最好从标准库提供的类型之一派生它们,这样客户端代码就有更好的机会为所有逻辑上相似的错误指定适当的处理,而不必捕获和处理它们分开并针对每个新的可能错误不断更新。

FWIW,标准在 15.1/9 中说:

If no exception is presently being handled, executing a throw-expression with no operand calls std::terminate().

非常明确地,“抛出什么...”的答案是没有进行任何抛出,而是调用 std::terminate

关于c++ - 如果我不告诉要在 C++ 中抛出什么类型的对象,throw 语句会抛出什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31376873/

相关文章:

c++ - 删除了所有自动生成的构造函数/运算符的类仍然可以从函数返回吗?

C++ 相当于 Java Enum.valueOf()

c++ - 构造函数参数默认值的链接器问题

java - @ControllerAdvice 异常处理程序方法未被调用

iphone - 如何实现全局 iPhone 异常处理?

现有数据的 C++ STL vector

c++ - 将一组 bool 值转换为数字

java - RESTEasy 中的 ExceptionMapper 问题

exception-handling - Tracing [rx] Observable exceptions in large graphs to source 代码

c# - 异常和内存