2016-04-20 1 views
0

В заявлении уловов Ьги мы можем сделать:Почему ... (три точки) в блоке catch существует?

try{} 
catch(...){} 

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

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

void foo(); 

Связан ли он с переменным числом шаблонов в любом случае?

+2

В C++, в отличие от C, '()' означает '(недействительными)' это не означает любой аргумент, а скорее список параметров без аргумента. – 101010

+2

[Читать книгу] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list). –

+0

не дублируется http://stackoverflow.com/questions/315948/c-catching-all-exceptions. пожалуйста, по крайней мере, прочитайте вопрос –

ответ

1

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

Но это не так,

catch(...){ 
    throw; 
} 

фактически повторно бросает исключение перехватывается ...

+0

хорошая точка .. поэтому внутренне исключение кэшируется скрытой переменной –

3

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

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

+0

Это действительно часто используется, если вы хотите что-то надежное. – Caduchon