C ++, exceto para uma função que não gera exceções, mas pode causar uma falha na memória
Por exemplo, é bastante comum haver duas maneiras distintas de acessar elementos de uma matriz privada, sobrecarregando o operador de assinatura de matriz ou definindoat
:
T& operator[](size_t i) { return v[i]; }
T const& operator[](size_t i) const { return v[i]; }
T& at(size_t i)
{
if (i >= length)
throw out_of_range("You shall not pass!");
return v[i];
}
T const& at(size_t i) const
{
if (i >= length)
throw out_of_range("You shall not pass!");
return v[i];
}
oat
A versão pode gerar uma exceção, mas o operador de assinatura de matriz não pode.
Minha pergunta é, apesar dooperator[]
não lança uma exceção, pode ser marcado comonoexcept
mesmo sabendo que pode gerar um sinal SIGSEGV, ou é apenas uma má prática?
Quero destacar um sinal (como SIGSEGV) não é uma exceção. Sendo literal interpretando onoexcept
significado, umnoexcept
é uma função que afirma que não lançará exceções. Não diz nada sobre mais nada (incluindo sinais).
Mas umnoexcept
função tem mais significado que isso, pelo menos para clientes do meu código.noexcept
também diz implicitamente que a função é segura e que terminará sua execução sem erros computacionais.
Então, é inapropriado marcarnoexcept
uma função que não é segura?