Использование throw для исключений при перегрузке операторов (C++)
И у меня плохое знание об исключениях и обработке. У меня есть код, определенный вокруг класса Polyline и Point. В этом случае точка зависит от полилинии. И описаны методы перегрузки операторов. У меня проблемы с одним из них из-за "броска", так как я не очень хорошо это понимаю.
Мой код:
//defining the operator overloading method for []
Point & Polyline::operator[](int index) const {
//defining the exception (why don't use "try"?)
if (index >= num) {
throw out_of_range("Index out of range");
}
// if everythings OK, it returns the object reference
return p[index];
}
Итак, вопросы.
Что такое throw для именно здесь (я знаю, что оно дает исключение для индекса вне диапазона), но зачем использовать throw вместо простого совета с cout или аналогичным? и почему не использовать попробовать?
Спасибо
2 ответа
Здесь мы используем throw, чтобы указать серьезность ошибки. Если мы просто посоветовали использовать cout, то программа продолжит выполнение после оператора. Использование throw позволяет нам передать, что при появлении индекса за пределами выполнения больше не должно выполняться тело нормальной функции.
Отсутствие блока try-catch показывает, что функция не предназначена для обработки диапазона индексов за пределами ошибок границ, а просто передает программный элемент управления для обработки блоком catch в другом месте.
'throw' означает сообщить вызывающей функции где-нибудь в стеке вызовов, что что-то пошло не так и произошло исключительное обстоятельство. В такой функции предполагается, что в ее теле есть функция, которая будет нести ответственность за любые исключения, возникающие во время выполнения - try
блок.
Другими словами, throw
означает, что произошла ошибка. Где-то еще в программе есть блок try, чтобы перехватить выброшенное исключение, или это должно быть, так как необработанное исключение вызовет программу terminate
,