Dois-je incorporer des spécificateurs d'exception en c?
Les spécificateurs d'exception en C permettent des fonctions pour indiquer si elles peuvent lancer des exceptions, telles que:
void foo() throw(); // guaranteed not to throw an exception
void bar() throw(int); // may throw an exception of type int
void baz() throw(...); // may throw an exception of some unspecified type
Bien que ces spécificateurs puissent transmettre l'intention, leur utilisation pratique est discutable en raison de plusieurs facteurs:
Les limitations de l'application des spécificateurs d'exception, ne réduisent pas leur efficacité. Le comportement idéal impliquerait des erreurs de compilation pour violer les spécifications, mais ce n'est pas garanti. Cette réponse sévère peut ne pas être souhaitable dans tous les cas.
Traitement incohérent dans les environnements de développement
Certains environnements de développement, tels que vs.net, Treat Throw (x) comme throw (...), saper l'adhésion à l'exception de l'exception. Spécificateurs
En plus des préoccupations ci-dessus, plusieurs arguments défendent l'utilisation des spécificateurs d'exception:
Compatibilité avec les modèles:
Spécifications d'exception peuvent entraver le développement du code de modèle dû aux comportements d'exception imprévisibles. Extensibilité:Spécification des exceptions attendues peut limiter l'évolution du code dans le temps. Réservation des exceptions pour des scénarios exceptionnels.
Lorsque des spécificateurs d'exception peuvent être utiles
malgré la recommandation générale contre l'utilisation des spécificateurs d'exception, ils peuvent toujours être bénéfiques lorsque:
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3