Первый улов ловит любой тип

этот кусок кода сводит меня с ума:

#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

3

Решение

Трудно без простого случая воспроизведения, но попробуйте это:
Переместить

catch (const std :: string &Икс)

быть ДО подвоха для инт.

Я подозреваю, что, возможно, происходит то, что, поскольку строка может быть приведена к типу int, она пытается это сделать. Хотя это может быть не полный ответ, по крайней мере, вы на шаг ближе к пониманию происходящего, и теперь у вас есть обходной путь.

Трудно отладить что-то подобное удаленно, но, если не сказать больше, это хорошее упражнение в критической логике и подходах к отладке.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]