这段代码让我疯狂:
#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
答案 0 :(得分:0)
没有一个简单的repro案例很难,但试试这个: 移动
catch(const std :: string&amp; x)
在int的捕获之前。
我怀疑可能发生的事情是,因为它可以以某种方式将字符串强制转换为int,它正试图这样做。虽然这可能不是一个完整的答案,但至少你已经向理解正在发生的事情迈进了一步,现在你有一个解决方法。
很难远程调试这样的东西,但如果没有其他的东西,它是关键逻辑和调试方法的一个很好的练习。