При каких обстоятельствах следующие два кода не эквивалентны?Код с try-catch-rethrow эквивалентен коду без try-catch?
{
// some code, may throw and/or have side effects
}
try {
// same code as above
} catch(...) {
throw;
}
редактировать Просто чтобы прояснить, я не заинтересован в (I) отклонения от выше рисунка (например, больше кода в блоке улова), ни (б) предназначены пригласить покровительственно комментарии по поводу правильное использование try
- catch
блоков.
Я ищу квалифицированный ответ со ссылкой на стандарт C++. Этот вопрос был запрошен комментарием от Cheers and hth. - Alf до this answer of mine, указав без пояснения, что выше коды не эквивалентны.
редактировать они действительно отличаются. стека в обмотке будет выполняться в последнем случае, но не обязательно в первом, в зависимости от того, найден ли обработчик исключений (некоторый размер catch
блок выше стека) во время выполнения.
* Есть ли там обстоятельства, когда они не эквивалентны? – user2079303
@ пользователь2079303 это как раз мой вопрос. – Walter
О, я вижу. Я только прочитал вопрос, который спрашивает, когда они не эквивалентны, что подразумевает, что такие случаи существуют. Я хотел бы знать, что такое @ Cheersandhth.-Alf имеет в виду. – user2079303