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
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente las Cuestiones de GitHub como mecanismo de retroalimentación para el contenido y lo sustituiremos por un nuevo sistema de retroalimentación. Para más información, consulta:Enviar y ver comentarios de