在c++中,如果我没有说明要抛出什么类型的对象,抛出什么抛出语句
What throw statement throws if i do not tell what type of object is to be thrown in c++?
由于没有显式抛出对象,下面的代码异常终止。下面代码中的throw语句抛出了什么?
int main()
{
try{
cout<<"try";
throw ;
}
catch(...){
cout<<"catch";
}
return 0;
}
不带参数的throw
只能在catch
语句中使用,以重新抛出捕获的异常对象。您的代码试图在catch
语句之外使用它-相反,您应该选择要抛出的类型,如果有疑问,从std::runtime_error
开始并不是不合理的。有关更多选项,请参阅此处。你也可以抛出你自己的类型,但通常从标准库提供的类型中派生它们是一个好主意,这样客户端代码就有更好的机会为所有逻辑上相似的错误指定适当的处理,而不是单独捕获和处理它们,并不断更新每个新的可能的错误。
本标准在15.1/9中规定:
如果当前没有处理异常,执行一个没有操作数的抛出表达式调用
std::terminate()
。
所以非常明确,"抛出什么…"的答案是不抛出,而调用std::terminate
。
所以问题是:"当我throw
在catch
块之外时会发生什么?"这个问题的答案可以在其文档中找到:
重新抛出当前处理的异常。放弃当前catch块的执行,并将控制传递给下一个匹配的异常处理程序(但不传递给同一个try块之后的另一个catch子句:它的复合语句被认为已经"退出"),重用现有的异常对象:不生成新对象。此形式仅在当前正在处理异常时允许使用(如果不使用则调用std::terminate)。与function-try-block相关联的catch子句如果用于构造函数,必须通过重新抛出退出。
强调我的。
相关文章:
- 静态自动 constexpr t = { "red" , "black" , "green" } 是什么类型;派生到?
- 这是什么类型的C++语法,我应该采取什么步骤来理解这一点
- 当你只使用 return 时,函数返回什么类型;在 c++ 中
- 这在C++是什么类型的错误?
- 如果在 C++ 构造函数中以错误的顺序初始化对象数据,会发生什么类型的错误
- 重载运算符返回什么类型的值(对于用户定义的类型):右值还是左值?
- int(int)& 或 int(int) const &是什么类型?
- 它>首先给出什么类型?
- ``n = 1u;'有什么类型
- 访问和存储/解析性std :: Chrono ::持续时间:: milliseconds(cpprest)时使用什么类型
- 二进制要找到什么类型的序列化
- 我如何找出3D容器的元素是什么类型
- C++ - 函数中的局部指针变量具有什么类型的存储持续时间以及它们存储在哪里?
- 将 lambda 作为模板参数传递:实际推导出什么类型
- 在 c 和 c++ 中,二维数组的元素是什么类型?
- 什么类型会使"std::has_unique_object_representations"返回 false?
- 这个 lambda 的参数是什么类型?
- 转换逻辑目标是什么类型
- 由值持有的成员的get函数应该具有什么类型
- C++中使用什么类型来定义数组大小