Hoy he encontrado un error en un bloque catch
:Perder tipo de excepción cuando Regeneración de una excepción de un bloque catch
catch (const exception& e){
// do something
// throw e; <-- bug!
throw; // <-- right thing to do
}
Básicamente si volver a lanzar la excepción e
explícitamente, consigo un nuevo std::exception
reconstruido, en De hecho, el mensaje del método what()
fue el predeterminado std::string
, en lugar de mi mensaje personalizado.
¿Cuál es la explicación? Pensé que throw;
es solo una abreviatura de throw ExceptionJustCaught;
.
Es la diferencia entre un valor y una referencia. –
Este es un concepto muy importante que a menudo se pasa por alto (y, en mi opinión, un poco complicado de sintaxis que al menos debería ser una advertencia cuando se compila ...). Gran pregunta! – NHDaly