117 votes

Pour boucle rattacher à l'intérieur de ses propres accolades

Je suis tombé sur cette mise en page pour boucle:

Je me demandais à quoi est destinée cette couche supplémentaire d'accolades? Cela apparaît à quelques reprises dans notre base de code.

286voto

UKMonkey Points 5628

Une fois, il ya de nombreuses lunes, VS6 existé et a été populaire. Il a toutefois échoué à se conformer à un certain nombre de normes C++; ce qui était raisonnable, au moment où il a été publié juste avant (sur la même année) la norme a été officiellement mis en liberté; il n'a toutefois adhérer au projet de norme pour autant que je suis au courant.

L'une des normes qui a changé entre le projet et la norme officielle, a été la durée de vie pour les variables de boucle créé dans la première section, menant le code suivant à défaut de compiler

{
    for (int i=0; i<1; ++i){}
    for (int i=0; i<2; ++i){}
}

parce qu' i a été redéfini par la deuxième boucle for.

Alors que d'autres compilateurs également subi ce bug; je mets en évidence le VS6 l'un parce qu'il est resté la seule version de visual studio pour un certain nombre d'années après la publication de la norme, mais n'a jamais publié une mise à jour pour ce problème particulier, ce qui signifie qu'il a eu un impact plus important.

Une solution est de forcer l'ensemble de la boucle dans son propre champ comme vous l'avez montré.

15voto

cokceken Points 1967

et créera une portée et si vous définissez certaines variables dans la portée, vous ne pouvez pas y accéder de l'extérieur. Mais `` déjà créer cette portée. ainsi

est le même que

mais si vous définissez quelque chose entre eux, il ya une différence

Dans cet exemple, `` ne sera pas accessible à partir de la portée extérieure.

2voto

Ron Points 10773

C'est un bloc de portée marquée par {} des accolades. Il est généralement utilisé pour marquer la zone de stockage automatique. Dans votre cas, il ne semble pas faire quoi que ce soit comme la boucle for a son propre champ d'application de la norme C++.

2voto

bolov Points 4005

Dans votre exemple particulier, il n'y a aucune raison pour eux.

Parfois, vous pouvez créer une portée pour une variable:

Cependant, je vois cela un anti-modèle. Habituellement, si vous vous trouvez dans le besoin de le faire alors très probablement le `` devrait être sa propre fonction.

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