Compartilhar via


Instrução for (C++)

Executa uma instrução repetidamente até que a condição se torne falsa. Para obter informações sobre a instrução for baseada em intervalo, consulte Instrução for baseada em intervalo (C++). Para obter informações sobre a instrução C++/CLI for each, consulte for each, in.

Sintaxe

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

Comentários

Use a instrução for para construir loops que devem ser executados um número especificado de vezes.

A instrução for consiste em três partes opcionais, conforme mostrado na tabela a seguir.

eElementos loop for

Nome da sintaxe Quando executado Descrição
init-expression init-expression é executado apenas uma vez, antes de qualquer outro elemento da instrução for. O controle passa para cond-expression. Muitas vezes usado para inicializar índices de loop. Ele pode conter expressões ou declarações.
cond-expression Antes da execução de cada iteração de statement, incluindo a primeira iteração. statement será executado apenas se cond-expression for avaliado como verdadeiro (diferente de zero). Uma expressão que é avaliada para um tipo integral ou um tipo de classe que tem uma conversão ambígua para um tipo integral. Geralmente usado para testar critérios de encerramento de loop.
loop-expression No fim de cada iteração de statement. Depois que loop-expression é executado, cond-expression é avaliado. Geralmente usado para incrementar índices de loop.

Os exemplos a seguir mostram diferentes maneiras de usar a instrução 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 e loop-expression podem conter várias instruções separadas por vírgulas. Por exemplo:

#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 pode ser incrementado ou diminuído, ou modificado de outras maneiras.

#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

Um loop for termina quando um break, return ou goto (para uma instrução rotulada fora do loop for) dentro de statement é executado. Uma instrução continue em um loop for encerra apenas a iteração atual.

Se cond-expression for omitido, será considerado true, e o loop for não terminará sem um break, return ou goto dentro de statement.

Embora os três campos da instrução for sejam normalmente usados para inicialização, teste para encerramento e incremento, eles não estão restritos a esses usos. Por exemplo, o código a seguir imprime os número de 0 a 4. Nesse caso, statement é a instrução null:

#include <iostream>
using namespace std;

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

for loops e o C++ Standard

O padrão C++ diz que uma variável declarada em um loop for deve sair do escopo após o término do loop for. Por exemplo:

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

Por padrão, em /Ze, uma variável declarada em um loop for permanece no escopo até que o escopo do loop for termine.

/Zc:forScope habilita o comportamento padrão de variáveis declaradas em loops for sem precisar especificar /Za.

Também é possível usar as diferenças de escopo do loop for para declarar variáveis em /Ze novamente da seguinte maneira:

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

Esse comportamento imita de forma mais próxima o comportamento padrão de uma variável declarada em um loop for, que exige que as variáveis declaradas em um loop for saiam do escopo após o loop ser concluído. Quando uma variável é declarada em um loop for, o compilador a promove internamente para uma variável local no escopo do loop for. Ela é promovida mesmo que já exista uma variável local com o mesmo nome.

Confira também

Instruções de iteração
Palavras-chave
while instrução (C++)
do-while instrução (C++)
Instrução for baseada em intervalo (C++)