我最近一直在学习c ++,在处理异常时,我遇到了让我感到困惑的事情。我抛出一个字符串异常并添加了多个catch块以查看它是如何工作的,并且由于某种原因,字符串异常被捕获在 int catch块中。这令我感到困惑,我无法找到原因,为什么会这样做。
仅供参考,我使用 GCC v 5.3.0
所以,我期待控制台上出现以下消息。
String exception occurred: Something else went wrong
但相反,我得到了以下信息。
Int exception occurred: 14947880
所以我尝试切换catch块的顺序并将字符串catch块放在顶部,我收到了字符串异常消息。有人可以解释一下这种情况发生的原因吗?似乎顶部的任何捕获块首先被捕获。
我不认为这是正确的行为,并且应该执行字符串异常块,但如果我错了,请纠正我。感谢您花时间看看这个。
#include <iostream>
using namespace std;
void MightGoWrong()
{
bool error = true;
if (error)
{
throw string("Something else went wrong");
}
}
/**
* Output on console: Int exception occurred: 14947880
*/
int main() {
try
{
MightGoWrong();
}
// If string or char pointer catch block goes to top, that block will execute
catch (int e)
{
cout << "Int exception occurred: " << e << endl;
}
catch (string &e)
{
cout << "String exception occurred: " << e << endl;
}
catch (char const * e)
{
cout << "Char exception occurred: " << e << endl;
}
return 0;
}