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