这段代码让我抓狂:
#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 虚拟机上、在线 GDB 和 repl-it 上试过了,它工作正常。我的意思是我有我所期望的:
string foo
我从不在这里发帖,因为我总能找到解决方案。但是这一次,看起来我无法找到正确的方法来询问谷歌,我只是迷路了。有人知道吗?
Windows 10 和我使用 MinGW
最佳答案
如果没有一个简单的重现案例就很难,但试试这个: 移动
catch (const std::string &x)
在捕获 int 之前。
我怀疑可能发生的情况是,由于它可以以某种方式将字符串转换为 int,因此它正在尝试这样做。虽然这可能不是一个完整的答案,但至少您离理解正在发生的事情又近了一步,现在您有了解决方法。
很难远程调试这样的东西,但如果不出意外,这是对关键逻辑和调试方法的很好练习。
关于c++ - first catch 捕获任何类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44123288/