Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A função é declarada,
noexceptmas chama a função function_name que pode gerar exceções (f.6).
Diretrizes principais do C++:
F.6: Se a sua função não deve lançar exceções, declare-a noexcept
Observações
Esta regra altera outra regra, C26440 DECLARE_NOEXCEPT, que tenta encontrar funções que são bons candidatos para marcar como noexcept. Neste caso, a ideia é que, uma vez que você marque alguma função como noexcept, ela deve manter seu contrato não invocando outro código que possa gerar exceções.
- O compilador Microsoft C++ já lida com violações diretas, como
throwdeclarações no corpo da função (consulte C4297). - A regra concentra-se apenas em chamadas de função. Ele sinaliza os alvos que não são
constexpre que podem lançar exceções. Em outras palavras, eles não são marcados explicitamente como não-lançamento usandonoexcept,__declspec(nothrow), ou throw(). - As funções de destino geradas pelo compilador são ignoradas para reduzir o ruído, uma vez que as especificações de exceção nem sempre são fornecidas pelo compilador.
- O verificador também ignora tipos especiais de funções de destino que esperamos que você implemente, pois
noexceptesta regra é imposta pelo C26439 SPECIAL_NOEXCEPT.
Exemplo
#include <vector>
#include <string>
#include <istream>
std::vector<std::string> collect(std::istream& is) noexcept
{
std::vector<std::string> res;
for (std::string s; is >> s;) // C26447, `operator bool()` can throw, std::string's allocator can throw
res.push_back(s); // C26447, `push_back` can throw
return res;
}
Você pode corrigir esses avisos removendo noexcept da assinatura da função.