C++ 下面的代码完全匹配,但显示运行时错误。为什么?

C++ 下面的代码完全匹配,但显示运行时错误。为什么?,c++,exception-handling,C++,Exception Handling,//样本h int calci(int &value) { if(value < 20) throw value; else return value; } class XYZ { int m_x; public: XYZ(int &x)try:m_x(x-calci(x)) { }catch (int &a) {} }; class ABC { int

//样本h

int calci(int &value)
{
   if(value < 20)
    throw value;
   else
     return value;
}

class XYZ
{
   int m_x;
   public: XYZ(int &x)try:m_x(x-calci(x))
          {
          }catch (int &a)
          {}

};
class ABC
{
   int m_a;
   public: ABC():m_a(0)
   {
   }
    void foo()
    {
        XYZ xyz(10);


    }
};




int main()
{
   ABC abc;
   abc.foo();
}
发件人:

什么不那么明显,但很清楚 标准中规定,如果 挡块不抛出(或 重新显示原始异常,或 扔出一些新的东西)和控制 到达 构造函数或析构函数,然后 原始异常将自动删除 收回

来自标准15.3/16

正在处理的异常是 如果控件到达 函数try块的处理程序 构造函数或析构函数。 否则,当 控件到达处理程序的末尾 对于功能试块(6.6.3)。 从一根管子的末端流出 函数try块相当于 无值返回;这导致 未定义的行为 值返回功能(6.6.3)

发件人:

什么不那么明显,但很清楚 标准中规定,如果 挡块不抛出(或 重新显示原始异常,或 扔出一些新的东西)和控制 到达 构造函数或析构函数,然后 原始异常将自动删除 收回

来自标准15.3/16

正在处理的异常是 如果控件到达 函数try块的处理程序 构造函数或析构函数。 否则,当 控件到达处理程序的末尾 对于功能试块(6.6.3)。 从一根管子的末端流出 函数try块相当于 无值返回;这导致 未定义的行为 值返回功能(6.6.3)


它的public:XYZ(int&x)try:m_x(x-calci(x))符合11@user323422我还看到你问了13个问题,却没有接受一个答案。@Andreas Brinck thanx我明白了,但我不想接受答案know@user323422单击您想要接受的答案左侧的复选框。其公共:XYZ(int&x)try:m_x(x-calci(x))一致11@user323422我还看到你问了13个问题,却没有接受一个答案。@Andreas Brinck thanx我明白了,但我不想接受答案know@user323422单击要接受的答案左侧的复选框。
void foo()
{
  try{
    XYZ xyz(10);
  }catch(...){}
}