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