Pour un type intégré, il n'y aura probablement aucune différence entre les deux styles (probablement jusqu'au code généré).
Cependant, si la variable est une classe avec un constructeur/destructeur non trivial, il pourrait bien y avoir une différence majeure dans le coût d'exécution. Je mettrais généralement la variable à l'intérieur de la boucle (pour garder la portée aussi petite que possible), mais si cela s'avère avoir un impact perfectible, j'envisagerais de déplacer la variable de classe en dehors de la portée de la boucle. Cependant, cela nécessite une analyse supplémentaire car la sémantique du chemin de l'ode peut changer, donc cela ne peut être fait que si la sémantique le permet.
Une classe RAII pourrait avoir besoin de ce comportement. Par exemple, une classe qui gère la durée de vie des accès aux fichiers peut avoir besoin d'être créée et détruite à chaque itération de la boucle pour gérer correctement l'accès aux fichiers.
Supposons que vous ayez un LockMgr
classe qui acquiert une section critique lorsqu'elle est construite et la libère lorsqu'elle est détruite :
while (i< 100) {
LockMgr lock( myCriticalSection); // acquires a critical section at start of
// each loop iteration
// do stuff...
} // critical section is released at end of each loop iteration
est très différent de :
LockMgr lock( myCriticalSection);
while (i< 100) {
// do stuff...
}
7 votes
Pour être clair, le code ci-dessus ne "déclare" pas cent fois var.
1 votes
@Rabarberski : La question référencée n'est pas un doublon exact car elle ne précise pas de langue. Cette question est spécifique au C++ . Mais selon les réponses postées à votre question référencée, la réponse dépend du langage et éventuellement du compilateur.
2 votes
@jason Si le premier bout de code ne déclare pas cent fois la variable 'var', pouvez-vous expliquer ce qui se passe ? Est-ce qu'il déclare la variable une fois et l'initialise 100 fois ? J'aurais pensé que le code déclarait et initialisait la variable 100 fois, puisque tout dans la boucle est exécuté 100 fois. Merci.
1 votes
Cela répond-il à votre question ? Déclarer des variables dans les boucles, bonne ou mauvaise pratique ?