Partage via


Instruction for (C++)

Exécute une instruction à plusieurs reprises jusqu'à ce que la condition soit false. Pour plus d’informations sur l’instruction for basée sur une plage, consultez Instruction for basée sur la plage (C++). Pour plus d’informations sur l’instruction C++/CLI for each, consultez for each, in.

Syntaxe

for ( init-expression ; cond-expression ; loop-expression )
statement

Notes

Utilisez l’instruction for pour créer des boucles à exécuter un certain nombre de fois.

L’instruction for se compose de trois parties facultatives, comme indiqué dans le tableau suivant.

pour les éléments de la boucle

Nom de la syntaxe Au moment de l’exécution Description
init-expression init-expression est exécuté une seule fois, avant tous les autres éléments de l’instruction for. Le contrôle passe alors à cond-expression. Souvent employé pour initialiser des index de boucle. Elle peut contenir des expressions ou des déclarations.
cond-expression Avant l'exécution de chaque itération de statement, y compris la première itération. statement est exécuté uniquement si cond-expression a la valeur true (valeur différente de zéro). Expression qui correspond à un type intégral ou à un type de classe avec une conversion non ambiguë en type intégral. Normalement utilisée pour déterminer les critères d'arrêts de boucles.
loop-expression À la fin de chaque itération de statement. loop-expression est évalué après l'exécution de cond-expression. Normalement utilisée pour incrémenter les index de boucle.

Les exemples suivants montrent diverses façons d’utiliser l’instruction for.

#include <iostream>
using namespace std;

int main() {
    // The counter variable can be declared in the init-expression.
    for (int i = 0; i < 2; i++ ){
       cout << i;
    }
    // Output: 01
    // The counter variable can be declared outside the for loop.
    int i;
    for (i = 0; i < 2; i++){
        cout << i;
    }
    // Output: 01
    // These for loops are the equivalent of a while loop.
    i = 0;
    while (i < 2){
        cout << i++;
    }
    // Output: 01
}

init-expression et loop-expression peuvent contenir plusieurs instructions séparées par des virgules. Par exemple :

#include <iostream>
using namespace std;

int main(){
    int i, j;
    for ( i = 5, j = 10 ; i + j < 20; i++, j++ ) {
        cout << "i + j = " << (i + j) << '\n';
    }
}
/* Output:
    i + j = 15
    i + j = 17
    i + j = 19
*/

loop-expression peut être incrémenté ou décrémenté, ou autrement modifié.

#include <iostream>
using namespace std;

int main(){
for (int i = 10; i > 0; i--) {
        cout << i << ' ';
    }
    // Output: 10 9 8 7 6 5 4 3 2 1
    for (int i = 10; i < 20; i = i+2) {
        cout << i << ' ';
    }
}
// Output: 10 12 14 16 18

Une boucle for s’achève lorsqu’un break, return ou goto (vers une instruction étiquetée extérieure à la boucle for) contenue dans statement est exécutée. Une instruction continue contenue dans une boucle for termine uniquement l’itération en cours.

Si cond-expression elle est omise, elle est considérée comme true et la boucle for ne se termine pas sans un break, return ou goto dans statement.

Bien que les trois champs de l’instruction for soient normalement utilisés pour l’initialisation, les tests d’arrêt et l’incrémentation, ils ne sont pas limités à ces applications. Par exemple, le code suivant affiche les nombres 0 à 4. Dans ce cas, statement est l'instruction null :

#include <iostream>
using namespace std;

int main()
{
    int i;
    for( i = 0; i < 5; cout << i << '\n', i++){
        ;
    }
}

Boucles for et Standard C++

Selon la norme C++, une variable déclarée dans une boucle for passe hors de portée lorsque la boucle for est terminée. Par exemple :

for (int i = 0 ; i < 5 ; i++) {
   // do something
}
// i is now out of scope under /Za or /Zc:forScope

Par défaut, sous /Ze, une variable déclarée dans une boucle for reste dans l’étendue jusqu’à ce que l’étendue englobante de la boucle for soit terminée.

/Zc:forScope active le comportement standard des variables déclarées dans des boucles, sans besoin de spécifier /Za.

Il est également possible d’utiliser les différences d’étendue de la boucle for pour redéclarer des variables sous /Ze comme suit :

// for_statement5.cpp
int main(){
   int i = 0;   // hidden by var with same name declared in for loop
   for ( int i = 0 ; i < 3; i++ ) {}

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

Ce comportement reproduit plus fidèlement le comportement standard d’une variable déclarée dans une boucle for. Cette dernière requiert des variables déclarées dans une boucle for pour sortir de la portée lorsque la boucle est terminée. Lorsqu’une variable est déclarée dans une boucle for, le compilateur la convertit en interne en variable locale dans la étendue englobante de la boucle for. Il est promu même s’il existe déjà une variable locale du même nom.

Voir aussi

Instructions d’itération
Mots clés
Instruction while (C++)
Instruction do-while (C++)
Instruction for basée sur la plage (C++)