J'ai entendu et lu plusieurs fois, il vaut mieux intercepter une exception comme référence à const plutôt que comme référence. Pourquoi est-ce
try {
// stuff
} catch (const std::exception& e) {
// stuff
}
mieux que
try {
// stuff
} catch (std::exception& e) {
// stuff
}
Vous avez besoin:
Ce dernier n'est pas autant important que le premier, mais la seule vraie raison de supprimer const serait de signaler que vous souhaitez apporter des modifications à l'exception (généralement utile uniquement si vous souhaitez la relancer avec contexte ajouté à un niveau supérieur).
Il n'y a fondamentalement aucune raison.
Les objets d'exception vivent dans leur propre espace mémoire† vous n'avez donc pas à vous soucier d'attraper les exceptions créées dans les expressions temporaires.
Tout ce que vous faites, c'est promettre que vous ne modifierez pas l'objet d'exception, mais puisque les objets d'exception devraient avoir une interface immuable‡, il n'y a vraiment rien de pratique ici.
Cependant, cela pourrait vous faire sentir chaud et confortable lorsque vous le lisez - c'est comme ça pour moi!
† Ils ont leur propre pile locale de threads.
‡Disclaimer: Boost.Exception casse cela afin de faire des trucs funky et ajouter des détails d'exception, après la construction. Mais c'est du piratage!
Il indique au compilateur que vous n'appelerez aucune fonction qui modifie l'exception, ce qui peut aider à optimiser le code. Cela ne fait probablement pas beaucoup de différence, mais le coût de le faire est également très faible.
allez-vous modifier l'exception? sinon, il peut tout aussi bien être const. la même raison pour laquelle vous DEVRIEZ utiliser const partout ailleurs (je dis DEVRAIT parce que cela ne fait pas vraiment une grande différence à la surface, pourrait aider les compilateurs, et aussi aider les codeurs à utiliser votre code correctement et à ne pas faire ce qu'ils ne devraient pas faire)
les gestionnaires d'exceptions, peuvent être spécifiques à la plate-forme et peuvent placer des exceptions dans des endroits amusants parce qu'ils ne s'attendent pas à ce qu'ils changent?