52 votes

Utilisation de throw pour remplacer le retour dans les fonctions C ++ non void

Dans les fonctions C ++, est-il recommandé de remplacer return par throw ? Par exemple, j'ai le code suivant

 // return indices of two numbers whose sum is equal to target
vector<int> twoSum(vector<int>& nums, int target) {
    for(int i=0; i<nums.size()-1; ++i)
        for(int j=i+1; j<nums.size(); ++j)
        {
            if(nums[i] + nums[j] == target) return vector<int>{i, j};
        }
    // return vector<int>{};
    throw "no solution";
}

Le code ci-dessus compile avec mon GCC 7.2.

20voto

Code-Apprentice Points 18086

return et throw ont deux objectifs différents et ne doivent pas être considérés comme interchangeables. Utilisez return lorsque vous avez un résultat valide à renvoyer à l'appelant. D'autre part, utilisez throw lorsqu'un comportement exceptionnel se produit. Vous pouvez avoir une idée de la façon dont les autres programmeurs utilisent throw en utilisant des fonctions de la bibliothèque standard et en prenant note du moment où ils lancent des exceptions.

15voto

Pedro LM Points 733

En plus des autres réponses, il y a aussi des performances : intercepter une exception entraîne une surcharge d'exécution (voir cette réponse ) par rapport à une clause if

(Bien sûr, nous parlons de microsecondes ... Que cela soit pertinent ou non dépend de votre cas d'utilisation spécifique.)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X