Что означает одиночный «бросок»; оператор do?

В эти дни я много читал FAQ по C ++ и особенно эта страница .

Прочитав этот раздел, я обнаружил «технику», которую автор называет «диспетчером исключений», которая позволяет кому-то сгруппировать всю свою обработку исключений в одной удобной функции:

void handleException()
{
  try {
    throw; // ?!
  }
  catch (MyException& e) {
    //...code to handle MyException...
  }
  catch (YourException& e) {
    //...code to handle YourException...
  }
}

void f()
{
  try {
    //...something that might throw...
  }
  catch (...) {
    handleException();
  }
}

Меня беспокоит единственный throw; оператор: Если вы рассмотрите данный пример, то, конечно, очевидно, что он делает: он повторно генерирует исключение, впервые обнаруженное в f () , и обрабатывает его снова.

Но что, если я вызову handleException () сам по себе, напрямую, без использования предложения catch () ? Есть ли какое-то конкретное поведение?

Вдобавок к бонусным очкам, есть ли еще какое-нибудь «странное» (вероятно, не хорошее слово) использование throw , о котором вы знаете?

Спасибо.

47
задан ereOn 21 March 2011 в 14:02
поделиться