Ответ 1
-
<stdexcept>
: Определяет набор стандартных исключений, которые могут использоваться как библиотекой, так и программами для сообщения об общих ошибках. -
<exception>
: Определяет базовый класс (т.е.std::exception
) для всех исключений, создаваемых элементами стандартной библиотеки, а также несколько типов и утилит для облегчения обработки исключений.
Таким образом, <exception>
определяет класс std::exception
, а <stdexcept>
определяет несколько классов, которые наследуют от std::exception
(например, std::logic_error
, std::out_of_range
). Вот почему <stdexcept>
включает <exception>
.
Они находятся в отдельных заголовках, потому что если вы хотите определить свой собственный класс исключений, наследующий std::exception
(и не использовать классы из <stdexcept>
), вы можете избежать ненужных определений.