Я перехожу через 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), тогда ошибки нет. Я что-то не понимаю, поскольку это связано с генерацией исключений из функций?