этот кусок кода сводит меня с ума:
#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 Linux, на GDB онлайн и repl-it, и он работает нормально. Я имею в виду, у меня есть то, что я ожидаю:
string foo
Я никогда не пишу здесь, потому что я всегда нахожу решение. Но на этот раз, похоже, я не могу найти правильный способ спросить Google, и я просто потерян. Кто-нибудь понял?
Windows 10 и я использую MinGW
Трудно без простого случая воспроизведения, но попробуйте это:
Переместить
catch (const std :: string &Икс)
быть ДО подвоха для инт.
Я подозреваю, что, возможно, происходит то, что, поскольку строка может быть приведена к типу int, она пытается это сделать. Хотя это может быть не полный ответ, по крайней мере, вы на шаг ближе к пониманию происходящего, и теперь у вас есть обходной путь.
Трудно отладить что-то подобное удаленно, но, если не сказать больше, это хорошее упражнение в критической логике и подходах к отладке.
Других решений пока нет …