Bueno, mientras que buscando en Google acerca de esta especificación de tiro, tenía un vistazo a este artículo: - (http://blogs.msdn.com/b/larryosterman/archive/2006/03/22/558390.aspx)
reproduzco una parte aquí también, de modo que pueda ser utilizado en futuro independientemente del hecho de que el enlace de arriba funciona o no.
class MyClass
{
size_t CalculateFoo()
{
:
:
};
size_t MethodThatCannotThrow() throw()
{
return 100;
};
void ExampleMethod()
{
size_t foo, bar;
try
{
foo = CalculateFoo();
bar = foo * 100;
MethodThatCannotThrow();
printf("bar is %d", bar);
}
catch (...)
{
}
}
};
Cuando el compilador ve esto, con el "tiro()" atributo, el compilador puede optimizar por completo la "barra" variables de distancia, porque sabe que no hay manera para que una excepción sea lanzada fuera del MethodThatCannotThrow(). Sin el atributo throw(), el compilador tiene que crear la variable "bar", porque si MethodThatCannotThrow arroja una excepción, el manejador de excepciones puede/dependerá del valor de la variable de barra.
Además, las herramientas de análisis de código fuente como prefast pueden (y usarán) la anotación throw() para mejorar sus capacidades de detección de errores; por ejemplo, si tiene try/catch y todas las funciones que llama están marcadas como throw(), no necesita el try/catch (sí, esto tiene un problema si luego llama a una función que podría lanzar).
ver este reciente pregunta relacionada: http://stackoverflow.com/questions/1037575/why-arent-exceptions-in-c-checked-by-the-compiler – laalto
Y http://stackoverflow.com/ questions/88573/should-i-use-an-exception-specifier-in-c – akauppi
¿'noexcept' cambia algo? –