В инструкции try catch мы можем сделать:
try{}
catch(...){}
Насколько я знаю, ...
означает любое исключение.
Мой вопрос: Почему стандарт C ++ выбрал этот путь (...)
вместо просто ()
? в то время как, например, в функциях, если вам не нужны параметры, вы просто ставите ()
:
void foo();
Это как-то связано с вариационными шаблонами?
catch()
будет означать, что в этот конкретный блок catch ничего не передается.
Но это неправда,
catch(...){
throw;
}
на самом деле повторно выдает исключение, пойманное ...
Это не имеет ничего общего с шаблонами с переменными значениями, потому что они появились в C ++ 11, тогда как catch (...)
существовал с самого начала (около двух десятилетий назад).
Что касается того, почему они выбрали (...)
вместо ()
Вы могли бы спросить Бьярна Страуструпа, но это вряд ли кажется важным. В любом случае, эта функция используется не так часто. В C ++ (...)
обычно означает что-то вроде «Любое количество вещей любых типов», тогда как ()
обычно означает «ничего». В зависимости от вашей точки зрения, любой из них может быть более предпочтительным для «перехвата всех исключений».