C++ 在没有活动异常的情况下终止调用
这是我的代码:C++ 在没有活动异常的情况下终止调用,c++,exception,C++,Exception,这是我的代码: #include<iostream> #include<boost/shared_ptr.hpp> using namespace std; void func() { cout<<" func # "<<endl; throw; } int main() { try { int x = -1; cout<<" point 1 "<<endl;
#include<iostream>
#include<boost/shared_ptr.hpp>
using namespace std;
void func()
{
cout<<" func # "<<endl;
throw;
}
int main()
{
try
{
int x = -1;
cout<<" point 1 "<<endl;
func();
cout<<" point 2 "<<endl;
}
catch (exception& e)
{
cout<<" exception caught "<<endl;
//throw;
}
cout<<" point 3 "<<endl;
return 0;
}
但我期待着:
point 1
func #
exception caught
我错过了什么?为什么这样叫terminate?
还有,如果我也从catch块抛出呢?这是因为
func
有一个空的throw
语句。如果在没有处理活动异常的情况下执行该语句,则应该调用terminate
如果当前没有处理异常,则在没有操作数的情况下计算抛出表达式将调用std::终止()
你需要扔东西才能抓住。空throw语句只有在处理异常时才能抛出某些内容
您可能打算编写抛出std::exception{}代码>
还有,如果我也从挡块上摔下来呢
假设您应用了修复程序,异常处理程序(catch
块)中的空throw
将重新抛出从func
内部捕获的异常。现在将调用std::terminate
,因为一个未捕获的异常即将离开main
函数代码>需要一个异常(除非您想在catch
块中重新显示当前活动的异常)。内部func()
只需执行throw std::runtime_error()代码>并且应该可以工作。Thanx用于快速回答。知道了。
point 1
func #
exception caught