Instrucción for (C++)

Ejecuta una instrucción repetidamente hasta que la condición es false. Para obtener información sobre la instrucción for basada en intervalos, consulte Instrucción for (C++) basada en intervalos. Para obtener más información sobre la instrucción for each de C++/CLI, consulte for each, in.

Sintaxis

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

Comentarios

Use la instrucción for para construir bucles que deben ejecutarse un número especificado de veces.

La instrucción for consta de tres partes opcionales, como se muestra en la tabla siguiente.

Elementos del bucle for

Nombre de la sintaxis Cuándo se ejecuta Descripción
init-expression Antes que cualquier otro elemento de la instrucción for, init-expression solo se ejecuta una vez. El control pasa entonces a cond-expression. Se suele utilizar para inicializar índices de bucle. Puede contener expresiones o declaraciones.
cond-expression Antes de la ejecución de cada iteración de statement, incluida la primera iteración. statement solo se ejecuta si cond-expression se evalúa como true (distinto de cero). Expresión que se evalúa como un tipo entero o un tipo de clase que tiene una conversión no ambigua a un tipo entero. Se utiliza normalmente para comprobar los criterios de finalización del bucle.
loop-expression Al final de cada iteración de statement. Después de ejecutarse loop-expression, se evalúa cond-expression. Se utiliza normalmente para incrementar índices de bucle.

En los ejemplos siguientes se muestran distintas formas de usar la instrucción 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 y loop-expression pueden contener varias instrucciones separadas por comas. Por ejemplo:

#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 se puede aumentar o reducir, o modificar de otras maneras.

#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

Un bucle for finaliza cuando se ejecuta una instrucción break, return o goto (en una instrucción con etiqueta fuera del bucle for) dentro de statement. Una instrucción continue en un bucle for solo finaliza la iteración actual.

Si se omite cond-expression, se considera como true y el bucle for no terminará sin break, return o goto en statement.

Aunque los tres campos de la instrucción for se suelen usar para la inicialización, comprobar la finalización y el incremento, no se limitan a estos usos. Por ejemplo, el código siguiente imprime los números de 0 a 4. En este caso, statement es la instrucción NULL:

#include <iostream>
using namespace std;

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

Bucles for y el estándar de C++

El estándar de C++ indica que una variable declarada en un bucle for saldrá del ámbito cuando finalice el bucle for. Por ejemplo:

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

De forma predeterminada, en /Ze, una variable declarada en un bucle for permanece en el ámbito hasta que finaliza el ámbito de inclusión del bucle for.

/Zc:forScope habilita el comportamiento estándar de las variables declaradas en bucles for sin necesidad de especificar /Za.

También es posible utilizar las diferencias de ámbito del bucle for para volver a declarar variables en /Ze de la manera siguiente:

// 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++ ) {}
}

Esto imita mejor el comportamiento estándar de una variable declarada en un bucle for, que requiere que las variables declaradas en un bucle for salgan del ámbito cuando finalice el bucle. Cuando una variable se declara en un bucle for, el compilador la promueve internamente a una variable local en el ámbito de inclusión del bucle for incluso aunque ya exista una variable local con el mismo nombre. Se promueve incluso si ya hay una variable local con el mismo nombre.

Consulte también

Instrucciones de iteración
Palabras clave
Instrucción while (C++)
Instrucción do-while (C++)
Instrucción for (C++) basada en intervalos