try, catch, throw
Trate erros com exceções
try, catch, throw é uma aula grátis de C++ Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C++ Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C++ Academy inclui 4 aulas no total.
Sinalização de erros com lançamento
A instrução throw lança uma exceção, abandonando o caminho atual e procurando um manipulador acima na pilha de chamadas.
#include <iostream>
#include <stdexcept>
int main() {
try {
throw std::runtime_error("boom");
} catch (const std::exception& e) {
std::cout << e.what() << "\n";
}
}Tentativa e captura
O código que pode lançar uma exceção fica em um bloco try; os manipuladores correspondentes vêm depois, em blocos catch.
#include <iostream>
#include <stdexcept>
int divide(int a, int b) {
if (b == 0) throw std::invalid_argument("divide by zero");
return a / b;
}
int main() {
try {
std::cout << divide(10, 0) << "\n";
} catch (const std::invalid_argument& e) {
std::cout << "error: " << e.what() << "\n";
}
}Capture por referência constante
Sempre capture exceções por const&. Capturá-las por valor fragmenta exceções derivadas e faz cópias desnecessárias.
Vários blocos de captura
Liste os manipuladores do mais específico ao mais geral. O primeiro bloco correspondente é executado.
#include <iostream>
#include <stdexcept>
int main() {
try {
throw std::out_of_range("bad index");
} catch (const std::out_of_range& e) {
std::cout << "range: " << e.what() << "\n";
} catch (const std::exception& e) {
std::cout << "other: " << e.what() << "\n";
}
}Desenrolamento da pilha
Quando uma exceção é lançada, a pilha se desenrola: cada objeto local entre o lançamento e o manipulador é destruído na ordem inversa.
#include <iostream>
#include <stdexcept>
struct Trace {
~Trace() { std::cout << "unwound\n"; }
};
void f() {
Trace t;
throw std::runtime_error("x");
}
int main() {
try { f(); } catch (...) { std::cout << "caught\n"; }
}Manipulador abrangente
Um bloco catch (...) captura qualquer tipo de exceção. Use-o com moderação, geralmente para registrar o erro e relançá-lo.
Relançamento
Dentro de um manipulador, um throw; sem argumento relança a exceção atual, preservando seu tipo para que um manipulador externo possa tratá-la.
#include <iostream>
#include <stdexcept>
void inner() { throw std::runtime_error("deep"); }
void middle() {
try { inner(); }
catch (...) { std::cout << "logged\n"; throw; } // rethrow
}
int main() {
try { middle(); } catch (const std::exception& e) { std::cout << e.what() << "\n"; }
}Hierarquia de exceções padrão
A maioria das exceções padrão deriva de std::exception, que expõe what(). Capturar std::exception trata todas elas.
Lance por valor, capture por referência
Lance objetos de exceção temporários por valor; o ambiente de execução os copia para uma área segura. Capture por referência para evitar fragmentação.
Exceções versus códigos de erro
As exceções separam o caminho de erro do caminho de sucesso e não podem ser ignoradas silenciosamente — ao contrário dos códigos de retorno. Reserve-as para situações realmente excepcionais.
Exceções não capturadas encerram o programa
Se nenhum manipulador corresponder, std::terminate será chamado e o programa será interrompido. Sempre trate as exceções esperadas.
Verificação rápida
Teste sua compreensão do tratamento de exceções.
Recapitulação
Você aprendeu a lançar erros com throw, tratá-los com try/catch e como o desenrolamento da pilha destrói os objetos locais ao longo do caminho. Capture por const&, ordene os manipuladores do específico ao geral e relance com um throw; sem argumento.
Perguntas Frequentes
A aula “try, catch, throw” é grátis?
Sim — o texto completo de “try, catch, throw” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C++ Academy, atualize para CoddyKit PRO. O curso de C++ Academy inclui 4 aulas no total.
O que vou aprender em “try, catch, throw”?
Trate erros com exceções Você pratica C++ Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar C++ Academy?
Nenhuma experiência prévia é necessária. C++ Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “try, catch, throw”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de C++ Academy?
Sim. Cada aula de C++ Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.