Question

   int somefunction(bool a)
    {
      try
      {
        if(a)
        throw Error("msg");
        return 2;
      }
     catch (Error const & error)
     {
       //do i need to return anything here??
       //return -1;
     }
    }
Était-ce utile?

La solution

Vous devez retourner quelque chose ou relancer l’exception (ou en lancer une nouvelle). Vous pouvez relancer la même exception en utilisant simplement le mot clé

throw

dans le bloc catch sans exception ni argument après.

Autres conseils

Si vous ne renvoyez rien là-bas, l'appelé fera peut-être une erreur, car la valeur de retour sera indéfinie et obtiendra peut-être l'un des codes de retour valides! Essayez ceci:

printf("%i\n", somefunction(false));
printf("%i\n", somefunction(true));

Sortie:

2
2293512

Le compilateur donne également un avertissement à cet égard (par exemple, "le contrôle atteint la fin de la fonction non vide").

La fonction renvoie un int, vous devez donc renvoyer un int. L’alternative consiste à ne pas intercepter l’exception dans la fonction et à la laisser se propager.

Tout d’abord, en prenant la ligne 9 comme exception que vous jetez à la ligne 6, vous faites un mauvais usage des exceptions. Vous faites essentiellement ce que vous pouvez faire avec un flux de programme normal, avec un "si" et déclaration. En ajoutant des exceptions ainsi créées à votre base de code, il ne sera plus vrai que des exceptions soient utilisées dans des situations vraiment exceptionnelles. Lorsqu'il existe une alternative simple, préférez ne pas lancer d'exceptions de vos fonctions.

Cela dit, vous pouvez quitter une fonction int de deux manières:

  • retourne un int
  • levant une exception

À moins que vous ne réexécutiez l'exception, vous devrez renvoyer un int (probablement une valeur d'erreur sentinelle).

En fonction de vos paramètres de compilateur / compilateur, vous ne pourrez pas compiler une fonction renvoyant int qui peut être laissée sans valeur de retour, c'est-à-dire que "l'exécution atteint la fin de la fonction non-vide". Alors oui, vous devez renvoyer une valeur, à moins que vous ne souhaitiez renvoyer l'exception.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top