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