Far*_*hid 6 c++ exception-handling
以下代码异常终止,因为没有显式抛出任何对象.throw语句在以下代码中抛出了什么?
int main()
{
try{
cout<<"try";
throw ;
}
catch(...){
cout<<"catch";
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Ton*_*roy 16
throw没有参数只应在catch语句中使用,以重新抛出捕获的异常对象.你的代码试图在catch语句之外使用它- 而你应该选择一个类型来抛出,如果有疑问,那么开始时并不是不合理的std::runtime_error.有关更多选项,请参阅此处.您也可以抛出自己的类型,但通常最好从标准库提供的类型中派生它们,这样客户端代码就有更好的机会为所有逻辑上类似的错误指定适当的处理,而不是必须捕获和处理它们是分开的,并且针对每个新的可能错误不断更新.
FWIW,标准在15.1/9中说:
如果当前没有处理异常,则执行不带操作数调用的throw-expression
std::terminate().
所以非常明确地说,"抛出什么......"的答案是没有投掷,std::terminate而是被调用.