3

这段代码让我发疯:

#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 online 和 repl-it 上尝试过它,它工作正常。我的意思是我有我所期望的:

string foo

我从不在这里发帖,因为我总能找到解决方案。但这一次,我似乎找不到正确的方法来询问谷歌,我只是迷路了。有人有线索吗?

Windows 10 和我使用 MinGW

4

1 回答 1

0

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

catch (const std::string &x)

在捕获 int 之前。

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

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

于 2017-05-22T23:20:50.563 回答