Por que o C ++ têm um mecanismo de erro de novo?

C ++ usa o mecanismo de exceção para erros. O # 8242-s errado com retornos de erro como Fortran usado para fazer? Fatoriais não pode ser negativa, então você poderia ter dito algo como # 147 Ok, se fatorial() detecta um erro, devolve um número negativo. O valor real indica a fonte do problema. # 148- O que # 8242-s errado com isso? Isso # 8242-s como foi feito para as idades. (# 147-Se era bom o suficiente para o vovô # 133- # 148-)

Infelizmente, vários problemas surgem. Em primeiro lugar, embora # 8242-s verdade que o resultado de um factorial pode # 8242-t ser negativo, outras funções aren # 8242-t a mesma sorte. Por exemplo, você pode # 8242-t tomar o log de um número negativo, quer, mas logaritmos pode ser negativo ou positivo. Não há nenhum valor que uma função de logaritmo não pode voltar.

Em segundo lugar, há # 8242-s apenas tanta informação que você pode armazenar em um inteiro. Talvez você pode ter -1 para # 147-argumento for negativo # 148- e -2 para # 147-argumento é muito grande. # 148- Mas, se o argumento for muito grande, você quer saber o que o argumento é porque essa informação pode ajudar a depurar o problema. Não # 8242-s nenhum lugar para armazenar esse tipo de informação.


Em terceiro lugar, o processamento de retornos de erro é opcional. Suponha que alguém escreve fatorial() para que ele obedientemente verifica o argumento e retorna um número negativo se o argumento está fora do intervalo. Se uma função que chama fatorial() doesn # 8242-t verificar o retorno de erro, retornando um valor de erro doesn # 8242-t fazer qualquer bom.

Claro, você pode fazer todos os tipos de ameaças ameaçadores, como # 147 Você irá verificar seus retornos de erro ou então, # 148- eo programador pode ter a melhor das intenções, mas todos sabem que as pessoas se preguiçoso e voltar aos velhos hábitos, não verificação de erros.

Mesmo se você verificar o retorno de erro de fatorial() ou qualquer outra função, que pode a função de fazer com o erro? Ele provavelmente não pode fazer nada mais do que a produção uma mensagem de erro próprio e retornar outra indicação de erro para o chamador, o que provavelmente faz o mesmo. Muito em breve, há mais código de detecção de erros do que o código "real" e é tudo misturado.

O mecanismo excepção aborda estes problemas através da remoção do caminho de erro a partir do caminho de código normal. Além disso, as exceções fazem tratamento de erros obrigatório. Se a sua função doesn # 8242-t lidar com a exceção lançada, o controle passa-se a cadeia de chamadas funções até C ++ encontrar uma função para manipular o erro.

Isto também lhe dá a flexibilidade para ignorar os erros que você pode # 8242-t fazer nada sobre qualquer maneira. Apenas as funções que pode realmente lidar com o problema precisa capturar a exceção.

» » » » Por que o C ++ têm um mecanismo de erro de novo?