2016-04-20 1 views
0

Dans l'instruction catch try nous pouvons faire:pourquoi ... (trois points) dans le bloc catch existe?

try{} 
catch(...){} 

Pour autant que je sache, ... signifie toute exception.

Ma question est: Pourquoi la norme C++ a-t-elle choisi cette voie (...) au lieu de seulement ()? tandis que, par exemple, dans les fonctions si vous n'avez pas besoin de paramètres que vous venez de mettre ():

void foo(); 

est-il lié aux modèles variadique de quelque façon?

+2

En C++, contrairement à C, '()' signifie: '(vide)' il ne signifie tout argument mais plutôt une liste de paramètres sans argument. – 101010

+2

[Lire un livre] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list). –

+0

il n'est pas dupliqué de http://stackoverflow.com/questions/315948/c-catching-all-exceptions. s'il vous plaît au moins lire la question –

Répondre

1

catch() impliquerait fortement que rien n'a été passé à ce bloc catch particulier.

Mais ce n'est pas vrai,

catch(...){ 
    throw; 
} 

fait re lancers francs l'exception interceptée par ...

+0

bon point .. donc en interne l'exception est mise en cache par une variable cachée –

3

Cela n'a rien à voir avec les modèles variadiques, car ceux-ci sont arrivés en C++ 11 alors que catch (...) existait depuis le début (environ deux décennies plus tôt). Quant à la raison pour laquelle ils ont choisi (...) au lieu de (), vous pouvez demander à Bjarne Stroustrup, mais cela ne semble pas important. Cette fonctionnalité n'est pas utilisée très souvent de toute façon. En C++, (...) signifie généralement quelque chose comme "N'importe quel nombre de choses de tous types" alors que () signifie généralement "Rien". Selon votre point de vue, l'un d'entre eux pourrait être plus préféré pour «attraper toutes les exceptions».

+0

Il est très souvent utilisé si vous voulez quelque chose de robuste. – Caduchon