Это зависит от компилятора, но ответ почти наверняка "да". В частности, если область содержит объект с нетривиальным деструктором, то этот объект должен быть зарегистрирован во время выполнения, чтобы вызвать деструктор для исключения. Например:
struct Thing
{
~Thing();
void Process();
};
for (int i = 0; i < 1000000; ++i)
{
Thing thing;
thing.Process();
}
В дополнение к созданию и обработке миллиона вещей, это также сгенерирует миллион вызовов функций для регистрации и отмены регистрации каждой вещи в случае, если вызов процесса вызывает.
Кроме того, при входе или выходе из блоков try
возникают небольшие издержки, поскольку соответствующий блок catch
добавляется или удаляется из стека обработчиков исключений.