Mam zagnieżdżony kod try-catch jak poniżej:ex.what() zmiany zagnieżdżonego try-catch
void A()
{
try
{
//Code like A = string(NULL) that throws an exception
}
catch(std::exception& ex)
{
cout<<"in A : " << ex.what();
throw ex;
}
}
void B()
{
try
{
A();
}
catch(std::exception& ex)
{
cout<<"in B : " << ex.what();
}
}
Po uruchomieniu tego mam ten wynik:
in A: basic_string::_M_construct null not valid
in B: std::exception
jak można zobacz, ex.what()
działa OK w funkcji A i powiedz mi poprawny opis, ale w B ex.what()
mówi mi tylko std::exception
. Dlaczego to się dzieje?
Czy w klauzuli catch funkcji A wystaje coś innego? Jak wyrzucić zagnieżdżony wyjątek, aby uzyskać dokładny opis wyjątku w B?
Patrz: http://stackoverflow.com/questions/1481612/what-is-the-difference-between-throw-and-throw -z-arg-z-złapanego-wyjątku, http://stackoverflow.com/questions/1833982/in-c-is-there-a-difference-between-throw-and-throw-ex –