При каких обстоятельствах следующие два кода не эквивалентны?
{
// some code, may throw and/or have side effects
}
try {
// same code as above
} catch(...) {
throw;
}
edit. Чтобы уточнить, меня не интересуют (i) отклонения от вышеприведенного шаблона (например, больше кода в блоке catch), и (ii) предназначено для того, чтобы приглашать покровительственные комментарии о правильном использование блоков try
- catch
.
Я ищу квалифицированный ответ со ссылкой на стандарт С++. Этот вопрос был вызван комментарием Cheers и hth. - Alf до этого моего ответа, указав без пояснения, что выше коды не эквивалентны.
редактировать, они действительно разные. стека в обмотке будет выполняться в последнем, но не обязательно в первом, в зависимости от того, найден ли обработчик исключений (некоторый блок catch
выше стека).