O que são mecanismos de exceção em C ++?
funciona ocasionalmente don # 8242-t trabalho corretamente - mesmo para programadores experientes em C ++. Os meios tradicionais de relatar falha é devolver alguma indicação para o chamador. C ++ inclui um mecanismo para a captura e processamento de erros chamada excepções. A manipulação de condições de erro com exceções é um conceito-chave para entender.
O mecanismo excepção baseia-se as expressões try, catch e lançar (esse # 8242-s direita, nomes mais variáveis que você pode # 8242-t utilização). Em linhas gerais, funciona assim: Uma função tenta para obter através de um pedaço de código. Se o código detecta um problema, ele lançaré uma indicação de erro que a função de chamada deve pegar.
O seguinte trecho de código demonstra como isso funciona em 1s e 0s:
// FactorialException - demonstrar exceções usando // a função fatorial // # include#incluir #incluir usando namespace std - // factorial - computar factorialint factorial (int n) {// você não pode lidar com valores negativos de n - // melhor seleção para que firstif condição (n lt; 0) {string throw ( "Argumento para fatorial negativa") -} // vá em frente e calcular factorialint accum = 1-while (n> 0) {accum * = nn ---} retornar accum-} int main (int nNumberofArgs , pszArgs char * []) {try {// isso vai workcout lt; lt; "Fatorial de 3 é" lt; lt; fatorial (3) lt; lt; endl - // isto irá gerar uma exceptioncout lt; lt; "Fatorial de -1 é" lt; lt; fatorial (-1) lt; lt; endl - // controle nunca terá herecout lt; lt; "Fatorial de 5 é" lt; lt; fatorial (5) lt; lt; endl -} // controle passa herecatch (erro string) {cout lt; lt; "Ocorreu um erro: " lt; lt; erro lt; lt; endl-} catch (...) {cout lt; lt; "Pegar Default" lt; lt; endl -} // espera até que o usuário está pronto antes de terminar o programa // para permitir que o usuário veja o resultscout programa lt; lt; "Pressione Enter para continuar ..." lt; lt; endl-cin.ignore (10, ' n') - cin.get () - retornar 0-}
a Principal() começa com a criação de um bloco equipado com o experimentar palavra-chave. Dentro deste bloco, pode proceder da maneira que seria se o bloco não estavam presentes. Nesse caso, a Principal() tenta calcular o fatorial de um número negativo.
Para não ser enganado, o inteligente fatorial() função detecta o pedido falso e lança uma indicação de erro usando o lançar palavra-chave. O controlo passa para o pegar frase, que segue imediatamente a chave de fechamento do experimentar quadra. A terceira chamada para fatorial() não é realizada.
Através de um recurso não-tão-inteligente chamado de especificação de exceção, você pode adicionar o tipo de objetos que fatorial() lança a sua declaração. Ao mesmo tempo, alguém pensou que esta seria uma boa ideia, mas os tempos mudam. especificações de exceção nunca foi obrigatório e foram reprovados no padrão 2011.