Sobes.tech
Middle+

O que acontece se uma exceção for lançada numa função marcada como noexcept?

sobes.tech IA

Resposta da IA

O programa será imediatamente terminado pela chamada a std::terminate(). Este é um comportamento padrão definido em C++ para lidar com exceções que escapam da função declarada como noexcept.

As secções do padrão C++ relacionadas a isto são:

  • [except.spec] Especificação noexcept.
  • [except.terminate] Tratamento por chamada a std::terminate().

Exemplo:

#include <iostream>
#include <stdexcept>
#include <cstdlib> // Para std::terminate

void f() noexcept {
    throw std::runtime_error("Ocorreu um erro na função noexcept");
}

int main() {
    try {
        f();
    } catch (...) {
        // Este bloco catch não será atingido
        std::cerr << "Exceção capturada" << std::endl;
    }

    // Se f() lançar uma exceção, std::terminate() será chamado antes desta linha
    std::cout << "O programa continua a execução (não será exibido)" << std::endl;

    return 0;
}

A saída deste programa conterá uma mensagem do manipulador std::terminate(), que pode depender da implementação, mas geralmente inclui informações sobre a razão do encerramento.

terminate called after throwing an instance of 'std::runtime_error'
  what():  Ocorreu um erro na função noexcept