nothrow (C++)

Específicos de Microsoft

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

Sintaxis

return-type [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 se invoque, a diferencia de , o en modo std::terminatenoexceptstd:c++17 (Visual Studio versión 15.5 y posteriores de 2017), 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 siguiente directiva de preprocesador, las tres declaraciones de función siguientes son equivalentes en /std:c++14 modo :

#define WINAPI __declspec(nothrow) __stdcall

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

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

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

FIN de Específicos de Microsoft

Vea también

__declspec
noexcept
Palabras clave