Objetivos
Exception
Uma exceção ou exception, é um evento ou acontecimento não desejado que pode ocorrer durante
a execução de nossos programas, como erros de acesso a memória, falhas ao abrir um arquivo
e outros. Quando uma exception ocorre, um objeto contendo suas informações é "lançado" para
seu tratamento.
Exemplos de exceções
exception: exceção base de todas as exceções.
invalid_argument: argumento inválido.
out_of_range: acesso indevido a local de memória.
Para lançarmos uma exeption, de forma explícita, durante a a execução de nossos métodos,
utilizamos o comando throw.
A linguagem C++ nos permite lançar exceções a partir de valores contidos em tipos básicos
de de dados:
Sintaxe 1: throw com valor
throw valor_numerico;
throw string;
Sintaxe 2: throw com objeto
throw new Exception("minha mensagem de erro");
Exemplo 1
#include <iostream>
using namespace std;
int main()
{
try
{
throw "Ocorreu um erro";
}
catch(const char *e)
{
cout << "Erro fatal:" << endl;
cout << e << endl;
}
//outros blocos catch aqui
return 0;
}
Saída
Erro fatal:
Ocorreu um erro
Exemplo 2
#include <iostream>
using namespace std;
int main()
{
try
{
throw new Exception();
}
catch(const char *e){
cout << "Erro fatal"
cout << e << endl;
}
return 0;
}
Saída
Erros
Recuperando mensagem de erro
Para recuperarmos a mensagem de erro contida em uma exception, utilizamos o métodos
what que é herdado da classe Exception.
Sintaxe
public string what();
Exemplo 2
#include <iostream>
#include //exceções padrão
using namespace std;
int main()
{
try {
throw invalid_argument("invalid_argument");
}
catch (const invalid_argument &a) {
cout << "Erro:" << a.what() << endl;
}
return 0;
}
Saída
invalid_argument
O comando throw é utilizado tanto para lançar uma exceção quanto para relançar. Para
relançar uma exceção, basta utilizar apenas o comando throw dentro de
um bloco catch, como visto abaixo:
Sintaxe
catch(const tipo_excecao &variavel)
{
throw; //relançando exceção
}
Exemplo 4
#include <iostream>
#include <stdexcept>
using namespace std;
void funcao(int arg)
{
try
{
throw invalid_argument("Erro invalid_argument");
}
catch(const invalid_argument &e)
{
throw; //relançando erro
}
}
int main()
{
try
{
funcao(1);
}
catch(const invalid_argument &ia)
{
cout << ia.what();
}
catch (...) //qualquer outro erro
{
cout << "Ocorreu um erro";
}
return 0;
}
Saída
Erro invalid_argumento
Tipos de exceptions nativas
Abaixo, uma lista de algumas exceções nativas mais comuns disponíveis na linguagem C++.
Tab. 1: Exceções nativas
Nome |
Descrição |
exception |
Exceção base de todas as exceções |
bad_allow |
lançada ao usar new |
bad_cast |
Lançada ao usar dynamic_cast |
bad_exception |
Exceção genérica |
domain_error |
Lançada por cálculos matemáticos |
invalid_argument |
Lançada ao existir argumentos em formatos inválidos |
length_error |
Lançada quando algum recurso atinge o limite máximo |
out_of_range |
Lançada quando há uma tentativa de leitura de um local de memória além do permitido |
overflow_error |
Lançada quando ocorre um erro matemática de transbordamento |
range_error |
Lançada quando há uma tentativa de escrita a local de memória além do permitido |
Em futuras atualizações, as exceptions acima serão estudadas com exemplos para melhor compreensão de seus usos.
Histórico de atualizações
- 31/07/2025 - revisão 4 - Correções: pontuais, sintaxes; Alteração: 'Exceção genérica' movida. Adição: Ex. 1
- 27/09/2024 - revisão 2 - Correção em intro 'Exception'; ajustes pontuais
- 12/02/2024 - revisão 1 - correção em navegação, css e erros gramaticais
- 30/06/2023 - versão inicial
Os cursos oferecidos nesta página são cursos fornecidos por parceiros. Ao comprar um curso clicando
em seu banner, você está ajudando a manter o projeto TutorialDev vivo. Os sites dos cursos parceiros utilizam cookies.