0Pricing
C++ Academy · Aula

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.

Todas as aulas deste curso

  1. try, catch, throw
  2. Segurança contra exceções
  3. Especificador noexcept
  4. Tipos de exceção personalizados
← Voltar para C++ Academy