Più in generale, è perché il blocco di cattura non sta rilevando l'eccezione che stai lanciando, se si lascia fuori il const.
Tuttavia, il lancio di un tipo non di eccezione è considerato non valido; considerare di lanciare un std::runtime_error
o altro tipo derivato da std :: exception. È possibile costruirne la maggior parte con una stringa e ottenere il messaggio dalla proprietà what()
.
Si dovrebbe comunque prendere questi con riferimento const, per impedire la copia e modificare l'oggetto catturato (che non è una cosa utile, in ogni caso):
try
{
throw runtime_error("full stack");
}
catch(const runtime_error & x)
{
cout << x.what();
}
catch(const exception & x)
{
// catch other exceptions derived from this base class.
}