nothrow
(C++)
Seção específica da Microsoft
Um atributo estendido __declspec
que pode ser usado na declaração de funções.
Sintaxe
tipo de retorno
__declspec(nothrow)
[convenção de chamada] nome da função ([lista de argumento])
Comentários
Recomendamos que todos os novos códigos usem o operador noexcept
em vez de __declspec(nothrow)
.
Esse atributo diz ao compilador que a função declarada, e as funções que ela chama nunca lançam uma exceção. No entanto, ela não impõe a diretiva. Em outras palavras, ele nunca faz com que std::terminate
seja invocado, ao contrário de noexcept
ou no modo std:c++17
(Visual Studio 2017 versão 15.5 e posterior), throw()
.
Com o modelo de tratamento de exceções síncronas, agora padrão, o compilador pode eliminar a mecânica de acompanhar o tempo de vida útil de determinados objetos desenroláveis nessa função e reduzir significativamente o tamanho do código. Dada a política de pré-processador a seguir, as três declarações de função abaixo são equivalentes no modo /std:c++14
:
#define WINAPI __declspec(nothrow) __stdcall
void WINAPI f1();
void __declspec(nothrow) __stdcall f2();
void __stdcall f3() throw();
No modo /std:c++17
, throw()
não é equivalente às outras que usam __declspec(nothrow)
porque ela faz com que std::terminate
seja invocada se uma exceção for lançada da função.
A declaração void __stdcall f3() throw();
usa a sintaxe definida pelo padrão C++. Em C++17, a palavra-chave throw()
foi preterida.
Fim da seção específica da Microsoft
Confira também
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de