почему … (три пункта) в блоке catch существует?

В инструкции try catch мы можем сделать:

try{}
catch(...){}

Насколько я знаю, ... означает любое исключение.

Мой вопрос: Почему стандарт C ++ выбрал этот путь (...) вместо просто ()? в то время как, например, в функциях, если вам не нужны параметры, вы просто ставите ():

void foo();

Это как-то связано с вариационными шаблонами?

0

Решение

catch() будет означать, что в этот конкретный блок catch ничего не передается.

Но это неправда,

catch(...){
throw;
}

на самом деле повторно выдает исключение, пойманное ...

1

Другие решения

Это не имеет ничего общего с шаблонами с переменными значениями, потому что они появились в C ++ 11, тогда как catch (...) существовал с самого начала (около двух десятилетий назад).

Что касается того, почему они выбрали (...) вместо ()Вы могли бы спросить Бьярна Страуструпа, но это вряд ли кажется важным. В любом случае, эта функция используется не так часто. В C ++ (...) обычно означает что-то вроде «Любое количество вещей любых типов», тогда как () обычно означает «ничего». В зависимости от вашей точки зрения, любой из них может быть более предпочтительным для «перехвата всех исключений».

3

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector