Veiller à ce que les exceptions sont toujours сaught

voix
21

Les exceptions en C ++ ne doivent pas être pris (pas d'erreur de temps de compilation) par la fonction d'appel. Il appartient donc au jugement de développeur que pour les attraper à l'aide try / catch (contrairement à Java).

Est-il possible, on peut faire en sorte que les exceptions lancées sont toujours capturés à l'aide try / catch par la fonction d'appel?

Créé 04/08/2008 à 11:01
source utilisateur
Dans d'autres langues...                            


7 réponses

voix
22

Non.

Voir A Look Pragmatique à exception Spécifications pour des raisons pourquoi pas.

La seule façon que vous pouvez « aider » est de documenter les exceptions de votre fonction peut lancer, dire comme un commentaire dans le fichier d'en-tête déclarant. Ce n'est pas appliquée par le compilateur ou quoi que ce soit. Utilisez des revues de code à cette fin.

Créé 04/08/2008 à 11:10
source utilisateur

voix
9

Vous ne devriez pas utiliser une exception ici. Ceci est évidemment pas un cas exceptionnel si vous devez être attendre partout où vous utilisez cette fonction!

Une meilleure solution serait d'obtenir la fonction pour retourner une instance de quelque chose comme ça. Dans debug (les développeurs supposant l'exercice des chemins de code qu'ils viennent écrit), ils vont se faire une assert s'ils oublient de vérifier si l'opération succeded ou non.

class SearchResult
{
  private:
    ResultType result_;
    bool succeeded_;
    bool succeessChecked_;

  public:
    SearchResult(Result& result, bool succeeded)
      : result_(result)
      , succeeded_(succeeded)
      , successChecked_(false)
    {
    }

    ~SearchResult()
    {
      ASSERT(successChecked_);
    }

    ResultType& Result() { return result_; }
    bool Succeeded() { successChecked_ = true; return succeeded_; }
}
Créé 24/09/2008 à 10:24
source utilisateur

voix
4

En dehors de la portée de votre question donc je poste ce pas a débattu , mais en Java il y a en fait 2 types d'exceptions, enregistrés et non enregistrés. La différence fondamentale est que, tout comme dans c[++], vous ne devez pas attraper une exception non contrôlée.

Pour une bonne référence essayer

Créé 04/08/2008 à 18:51
source utilisateur

voix
2

Chris 'a sans doute la meilleure réponse pur à la question:

Cependant, je suis curieux de savoir la racine de la question. Si l'utilisateur doit toujours envelopper l'appel dans un bloc try / catch, si la fonction appelée utilisateur vraiment lancer des exceptions en premier lieu?

Ceci est une question difficile à répondre sans plus de contexte en ce qui concerne la base de code en question. Tir de la hanche, je pense que la meilleure réponse est ici envelopper la fonction de telle sorte que la recommandation (si non seulement, selon le style général d'exception du code) interface publique fait l'try / catch pour l'utilisateur. Si vous êtes juste essayer d'assurer qu'il n'y a pas d' exception non gérée dans votre code, tests unitaires et examen du code sont probablement la meilleure solution.

Créé 05/08/2008 à 05:56
source utilisateur

voix
0

Il y avait une fois une tentative d'ajouter des spécifications d'exception dynamique à la signature d'une fonction, mais étant donné que la langue ne pouvait pas imposer leur exactitude, ils ont ensuite été dépréciée.

En C ++ 11 et avant, nous avons maintenant la spécificateur noexcept .
Encore une fois, si la signature est marquée à jeter, il n'y a toujours pas requriement qu'il soit pris en charge par l'appelant.


En fonction du contexte, vous pouvez vous assurer que le comportement exceptionnel soit pris en charge par le codage dans le système de type.

Voir: std :: en option dans le cadre des principes fondamentaux de la bibliothèque.

Créé 08/05/2016 à 15:07
source utilisateur

voix
0

Est-il possible, on peut faire en sorte que les exceptions lancées sont toujours capturés à l'aide try / catch par la fonction d'appel?

Je trouve assez drôle, que la foule Java - y compris moi - essaie d'éviter des exceptions vérifiées. Ils tentent de se frayer un chemin autour d' être forcé d'attraper des exceptions à l'aide RuntimeExceptions .

Créé 04/08/2008 à 19:14
source utilisateur

voix
0

Ou vous pourriez commencer à lancer des exceptions critiques. Certes, une exception de violation d'accès sera attraper l'attention de vos utilisateurs.

Créé 04/08/2008 à 18:33
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more