nothrow (C++)

Específicos de Microsoft

Atributo extendido __declspec que se puede usar en la declaración de funciones.

Sintaxis

return-type__declspec(nothrow) [call-convention] function-name ([argument-list])

Comentarios

Se recomienda que todo el código nuevo use el noexcept operador en lugar de __declspec(nothrow).

Este atributo indica al compilador que la función declarada y las funciones a las que llama nunca iniciarán una excepción. Sin embargo, no aplica la directiva. En otras palabras, nunca hace que std::terminate se invoque, a diferencia de noexcept, o en modo std:c++17 (Visual Studio 2017 versión 15.5 y posteriores), throw().

Con el modelo de control asincrónico de excepciones, que ahora es el predeterminado, el compilador puede eliminar los mecanismos de seguimiento de la duración de algunos objetos que no se pueden desenredar en esa función, y reducir significativamente el tamaño del código. Dada la directiva de preprocesador siguiente, las tres declaraciones de función que se muestran a continuación son equivalentes en modo /std:c++14:

#define WINAPI __declspec(nothrow) __stdcall

void WINAPI f1();
void __declspec(nothrow) __stdcall f2();
void __stdcall f3() throw();

En el modo /std:c++17, throw() no es equivalente a los demás que usan __declspec(nothrow) porque hace que std::terminate se invoque si se produce una excepción desde la función.

La void __stdcall f3() throw(); declaración, usa la sintaxis definida en el estándar de C++. En C++17, la palabra clave throw() está en desuso.

FIN de Específicos de Microsoft

Consulte también

__declspec
noexcept
Palabras clave