У меня есть функция foo
, которая может генерировать исключение bar
.
В другой функции я вызываю foo
, но у меня есть возможность добавить некоторые подробности в исключение bar
, если оно было выбрано. (Я бы предпочел не передавать такую информацию, как параметр, в foo
, поскольку она действительно не существует из-за общего характера этой функции.)
Итак, я делаю это в вызывающем:
try {
foo();
} catch (bar& ex){
ex.addSomeMoreInformation(...);
throw;
}
Будет ли throw
перебросить измененное исключение или мне нужно использовать throw ex;
? Последний предположительно возьмет ценную копию, поэтому я бы предпочел не делать этого. Может ли throw
взять копию значения? Я подозреваю, что это не так.
(Я знаю, что могу проверить, но я заинтересован в том, чтобы наткнуться на неуказанную конструкцию или undefined, поэтому хотел бы знать наверняка).