Je viens de lire que dans la révision standard C++ 11, les spécifications d'exception étaient obsolètes. J'ai déjà pensé que spécifier ce que vos fonctions peuvent lancer est une bonne pratique, mais apparemment pas. Après avoir lu Herb Stutter's well-cited article, je ne peux m'empêcher de me demander: pourquoi diable les spécifications d'exception sont-elles implémentées comme elles sont et pourquoi le comité a-t-il décidé de les déprécier au lieu de les faire vérifier à la compilation? Pourquoi un compilateur autoriserait-il même une exception qui n'apparaîtrait pas dans la définition de la fonction? Pour moi, tout cela ressemble à dire "Vous ne devriez probablement pas spécifier le type de retour de votre fonction, car lorsque vous spécifiez int f()
, mais return 3.5;
à l'intérieur, votre programme va probablement planter." (C.-à-où est la conceptuelle différence de la forte frappe?)Pourquoi les spécifications d'exception C++ ne sont-elles pas vérifiées lors de la compilation?
(Pour le manque de soutien de la spécification d'exception dans typedef
s, étant donné que la syntaxe du modèle est probablement Turing-complet, la mise en œuvre cela semble assez facile.)
Une chose importante à noter est que les compilateurs ne peuvent pas toujours voir la définition. –
Je pense qu'une grande raison est que cela casserait beaucoup de bon code de modèle. –
(Et si vous voulez pousser plus loin, pourquoi un compilateur permettrait-il même à une fonction d'accéder à des variables qui n'apparaissent pas dans la déclaration de fonction?) –