Je m'interroge sur l'utilisation du code comme ce qui suit
int result = 0;
int factor = 1;
for (...) {
result = ...
factor *= 10;
}
return result;
Si la boucle est itératée sur n
fois, alors factor
est multiplié par 10
exactement n
fois. Cependant, factor
n'est jamais utilisé après avoir été multiplié par 10
un total de n-1
fois. Si nous supposons que factor
ne débordne jamais, sauf sur la dernière itération de la boucle, mais peut trop déborder sur la dernière itération de la boucle, alors ce code devrait-il être acceptable? Dans ce cas, la valeur de factor
_ ne serait jamais utilisée après que le débordement ait eu lieu.
J'ai un débat sur si le code comme celui-ci devrait être accepté. Il serait possible de mettre la multiplication à l'intérieur d'une déclaration IF et de ne pas faire la multiplication sur la dernière itération de la boucle lorsqu'il peut déborder. L'inconvénient est qu'il cloque le code et ajoute une branche inutile qui devra vérifier sur toutes les itérations de la boucle précédente. Je pourrais aussi itérer sur la boucle une fois moins de temps et reproduire le corps de la boucle une fois la boucle, encore une fois, cela complique le code.
Le code actuel en question est utilisé dans une boucle interne étroite qui consomme un gros morceau du temps total de la CPU dans une application graphique en temps réel.
Pourquoi pas ceci:
int result = 0;
int factor = 10;
for (...) {
factor *= 10;
result = ...
}
return result;