第一个捕获捕获任何类型

时间:2017-05-22 22:54:21

标签: c++ c++11 exception-handling mingw catch-block

这段代码让我疯狂:

#include<iostream>
#include<string>

int main()
{
    std::string test = "foo";
    try
    {
        throw test;
    }
    catch (const int &x)
    {
        std::cout << "int " << x << "\n";
    }
    catch (const double &x)
    {
        std::cout << "double " << x  << "\n";
    } 
    catch (const std::string &x)
    {
        std::cout << "string " << x  << "\n";
    }  
    return 0;
}

这里没什么好疯狂的。但是输出......

int 7675456

我在我的Linux VM上尝试了它,在GDB上在线上进行了复制,并且它运行正常。我的意思是我有我的期望:

string foo

我从未在这里发帖,因为我总能找到解决方案。但这一次,看起来我无法找到一个正确的方式来问谷歌而我只是输了。有人知道吗?

Windows 10和我使用MinGW

1 个答案:

答案 0 :(得分:0)

没有一个简单的repro案例很难,但试试这个: 移动

  

catch(const std :: string&amp; x)

在int的捕获之前。

我怀疑可能发生的事情是,因为它可以以某种方式将字符串强制转换为int,它正试图这样做。虽然这可能不是一个完整的答案,但至少你已经向理解正在发生的事情迈进了一步,现在你有一个解决方法。

很难远程调试这样的东西,但如果没有其他的东西,它是关键逻辑和调试方法的一个很好的练习。