Qu’est-ce que cela signifie lorsque le premier paramètre «for» est vide?

J’ai parcouru du code et j’ai vu plusieurs exemples où le premier élément d’un cycle for est omis.

Un exemple:

for ( ; hole*2 <= currentSize; hole = child) 

Qu’est-ce que ça veut dire?

Merci.

Cela signifie simplement que l’utilisateur a choisi de ne pas définir de variable sur sa propre valeur de départ.

 for(int i = 0; i < x; i++) 

est équivalent à...

 int i = 0; for( ; i < x; i++) 

EDIT (en réponse aux commentaires): Ce ne sont pas exactement équivalents. la scope de la variable i est différente.

Parfois, ce dernier est utilisé pour casser le code. Vous pouvez également supprimer la troisième instruction si votre variable d'indexation est modifiée dans la boucle for elle-même ...

 int i = 0; for(; i < x;) { ... i++ ... } 

Et si vous supprimez la deuxième déclaration, vous avez une boucle infinie.

 for(;;) { runs indefinitely } 

La construction de est fondamentalement ( pre-loop initialisation; loop termination test; end of loop iteration) , cela signifie donc qu’il n’y a aucune initialisation dans cette boucle for.

Vous pouvez ainsi refactoriser n’importe quelle boucle:

 pre-loop initialisation while (loop termination test) { ... end of loop iteration } 

Cela signifie que la valeur initiale de hole été définie avant d’arriver à la boucle

Cela signifie que la variable de contrôle de boucle est initialisée avant la boucle for.

 For C code, int i=0; for( ; i <10 ; i++) { } //since it does not allow variable declaration in loop For C++ code, for(int i=0 ; i <10 ; i++) { } 

Vous pouvez omettre l’un des parameters d’une boucle for. ie: pour (;;) {} est à peu près le même que while (true) {}

Cela signifie que la valeur initiale de hole été définie avant d’arriver à la boucle.

On dirait une liste de traversée.

Supposons que vous vouliez

 for (hole=1 ; hole*2 <= currentSize; hole = child) 

Mais la valeur de hole juste avant la boucle for était déjà 1, alors vous pouvez glisser cette partie de la boucle d'initialisation:

 /* value of hole now is 1.*/ for ( ; hole*2 <= currentSize; hole = child) 

Certaines personnes se sont trompées alors je voulais juste clarifier les choses.

 int i = 0; for (; i < 10; i++) 

n'est pas la même chose que

 for (int i = 0; i < 10; i++) 

Les variables déclarées dans le mot clé for ne sont valides que dans cette étendue.

Pour le dire simplement.

Valide ("i" a été déclaré en dehors de la scope des boucles)

 int i = 0; for (; i < 10; i++) { //Code } std::cout << i; 

InValid ("i" n'existe pas en dehors de la scope de la boucle)

 for (int i = 0; i < 10; i++) { //Code } std::cout << i;