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?

questionAnswers(3)

yourAnswerToTheQuestion