Ainsi, alors que les recherches sur google à propos de ce lancer spécification, j'ai eu un coup d'oeil à cet article :- (http://blogs.msdn.com/b/larryosterman/archive/2006/03/22/558390.aspx)
Je suis en reprenant une partie de celui-ci ici aussi, de sorte qu'il peut être utilisé à l'avenir, indépendamment du fait que le lien ci-dessus fonctionne ou pas.
class MyClass
{
size_t CalculateFoo()
{
:
:
};
size_t MethodThatCannotThrow() throw()
{
return 100;
};
void ExampleMethod()
{
size_t foo, bar;
try
{
foo = CalculateFoo();
bar = foo * 100;
MethodThatCannotThrow();
printf("bar is %d", bar);
}
catch (...)
{
}
}
};
Lorsque le compilateur voit ce, avec le "throw()" de l'attribut, le compilateur peut optimiser complètement le "bar" de la variable loin, parce qu'il sait qu'il n'existe aucun moyen pour la levée d'une exception de MethodThatCannotThrow(). Sans le lancer() attribut, le compilateur doit créer le "bar" de la variable, parce que si MethodThatCannotThrow lève une exception, le gestionnaire d'exception peut/dépendra de la valeur de la barre de variable.
En outre, l'analyse du code source des outils comme prefast peut être (et sera) utiliser le throw() annotation à améliorer leurs capacités de détection des erreurs - par exemple, si vous avez un try/catch et toutes les fonctions que vous appelez sont marqués comme throw(), vous n'avez pas besoin de le try/catch (oui, cela a un problème, si vous appelez une fonction qui pourrait jeter).