throw;Выражение throw; (без объекта исключения) означает повторно выбросить текущее исключение. Оно позволяет повторно выбросить исключение, которое было поймано ранее, и передать его следующему обработчику в стеке вызовов.
class MyException {
public:
void addInfo(const std::string& info);
};
void f() {
try {
// код, который выбрасывает исключение
} catch (MyException& e) {
e.addInfo("f() failed");
throw; // повторно выбросить изменённое исключение
}
}
Этот паттерн позволяет поймать исключение по неконстантной ссылке, добавить информацию о контексте и затем повторно выбросить его. Это удобно для построения простой трассировки стека — контекст добавляется на каждом уровне вызовов.
void handleException() {
try {
throw; // повторно выбросить перехваченное исключение
} catch (MyException& e) {
// обработать MyException
} catch (YourException& e) {
// обработать YourException
}
}
void f() {
try {
// что-то, что может выбросить исключение
} catch (...) {
handleException();
}
}
Эта идиома позволяет одной функции-обработчику разбирать разные типы исключений в разных функциях, сокращая дублирование кода.
throw; можно использовать только внутри блока catchthrow e;Оператор throw; можно использовать вне блока catch для повторного выброса самого недавно выброшенного исключения в текущей области видимости.
Новый — ещё не проверен сообществом
Вы