C++ 下面的代码完全匹配,但显示运行时错误。为什么?
//样本hC++ 下面的代码完全匹配,但显示运行时错误。为什么?,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
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(...){}
}