Salut,
Ces trois points sont nommés "l'ellipse" et signifient que n'importe quel argument peut venir les remplacer.
Le symbol THROW0 est défini comme throw(), ce qui signifie qu'une fonction dont le spécificateur d'exception est définit sous la forme de THROW0 ne peut normalement pas lancer d'exception
Le symbol THROW1 est, quant à lui, défini comm throw(...), ce qu'il signifie qu'une fonction dont le spécificateur d'exception est défini sous la forme de THROW1 peut lancer n'importe quel type d'exception
Un petit exemple pour te permettre de comprendre:
est donc strictement similaire à
void fonction() throw(...);
et il n'y aura donc aucun problème si function est définie sous une forme proche de
1 2 3 4 5 6 7
| void fonction() throw(...)
{
/* n'importe quoi */
if(un_test_menant_a_une_exception)
throw MonExceptionParticuliere();
/* encore du code */
} |
(NOTA: je ne suis cependant pas sur que le spécificateur d'exception throw(...) soit accepté
)
Par contre
void autreFonction() THROW0;
sera strictement identique à
void autreFonction() throw();
qui indique que autreFonction ne devrait jamais lancer d'exception.
De ce fait, une exception qui serait lancée par autreFonction à cause d'un code proche de
1 2 3 4 5 6 7
| void autreFonction throw()
{
/* n'importe quoi */
if(un_test_menant_a_une_exception)
throw MonExceptionParticuliere();
/* encore du code */
} |
(qui serait par conséquent mal formé, vu qu'il ne respecte pas l'engagement que l'on a pris de ne pas lui faire lancer d'exception) ne sera jamais attrapée par aucun bloc catch, quel qu'il soit
Pour info, le spécificateur d'exception sera supprimé de la prochaine norme
Partager