在下面提到的代码中,当我使用
float
参数调用“方法”时,它会自动转换为int
并执行必要的任务。但是,当我抛出float
类型并且立即catch
需要int
参数时,它不起作用?为什么?另一件事,如果没有带有
float
的catch
语句,那么它应该转到常规catch
并从那里开始,如果我重新抛出哪个catch
会处理它?</p>int method(int i) { return i--; } void main() { try { cout<<method(3.14); throw string("4"); } catch(string& s){ try{ cout << s; throw 2.2; } catch(int i) cout<<i; catch(...) throw; cout<<"s"+s; } catch(...) cout<<"all"; }
最佳答案
函数调用在编译时解析,编译器能够检查类型,找到最接近的匹配(重载解析),然后进行适当的转换。当传播异常时,在运行时不会发生这样的事情。异常由与类型完全匹配的 catch
捕获,或者由异常的明确基础之一捕获。在您的情况下,int
根本不匹配double
。
与您的第二个问题一样:您的 rethrow
未包含在 try
block 中,因此它不会被最后一个 catch(...)
。最后一个 catch(...)
对应于第一个 try
block 。
关于c++ - 类型转换和异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14598751/