Compartilhar via


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

__declspec
noexcept
Palavras-chave