Je suis tombé sur cette disposition pour la boucle:
#include <iostream>
int main()
{
{
for (int i = 0; i != 10; ++i)
{
std::cout << "delete i->second;" << std::endl;
}
}
{
for (size_t i = 0; i < 20; ++i)
{
std::cout << "delete m_indices[i];" << std::endl;
}
}
return 0;
}
Je me demandais à quoi sert cette couche supplémentaire d'accolades? Cela apparaît plusieurs fois dans notre base de code.
Réponses:
Il était une fois, il y a de nombreuses lunes, VS6 existait et était populaire. Il n'a cependant pas réussi à se conformer à un certain nombre de normes C ++; ce qui était raisonnable à l'époque car il a été publié juste avant (la même année) la norme a été officiellement publiée; il a toutefois adhéré au projet de norme pour autant que je sache.
L'une des normes qui a changé entre le projet et la norme officielle était la durée de vie des variables de boucle for créées dans la première section; conduisant à l'échec de la compilation du code suivant
car
i
été redéfini par la deuxième boucle for.Alors que d'autres compilateurs ont également souffert de ce bogue; Je souligne le VS6 car il est resté la seule version de Visual Studio pendant un certain nombre d'années après la sortie de la norme, mais n'a jamais publié de mise à jour pour ce problème particulier; ce qui signifie qu'il a eu un impact plus significatif.
Une solution à cela est de forcer l'ensemble de la boucle for dans sa propre portée comme vous l'avez montré.
la source
{
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. Maisfor
créez déjà cette portée. Alorsest le même que
mais si vous définissez quelque chose entre eux, il y a une différence
Dans cet exemple,
a
ne sera pas accessible de l'extérieur de la portée.la source
Dans votre exemple particulier, il n'y a aucune raison pour eux.
Parfois, vous pouvez créer une étendue pour une variable:
Cependant, je vois cela comme un anti-modèle. Habituellement, si vous avez besoin de faire cela, cela devrait probablement
for
être sa propre fonction.la source
C'est une portée de bloc marquée par des
{}
accolades. Il est généralement utilisé pour marquer la zone de stockage automatique . Dans votre cas, il ne semble rien faire car la boucle for a sa propre portée en C ++ standard.la source