Я перебираю исключения C ++ и сталкиваюсь с ошибкой, в которой я не уверен, почему она вызывает у меня проблемы:
#include <iostream>
#include <exception>
class err : public std::exception
{
public:
const char* what() const noexcept { return "error"; }
};
void f() throw()
{
throw err();
}
int main()
{
try
{
f();
}
catch (const err& e)
{
std::cout << e.what() << std::endl;
}
}
При запуске я получаю следующую ошибку времени выполнения:
terminate called after throwing an instance of 'err'
what(): error
Aborted (core dumped)
Если полностью переместить логику try/catch
в f()
, т.е.
void f()
{
try
{
throw err();
}
catch (const err& e)
{
std::cout << e.what() << std::endl;
}
}
, и просто вызвать ее из main
(без блока try / catch в main),тогда нет ошибки.Я что-то не понимаю, поскольку это связано с генерацией исключений из функций?