抛出字符串异常时执行C ++异常int catch块

时间:2017-03-23 08:52:56

标签: c++ exception

我最近一直在学习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;
}

0 个答案:

没有答案