for — instrukcja (C++)
Wykonuje instrukcję wielokrotnie, dopóki warunek przestaje być prawdziwy.Aby uzyskać informacje o instrukcji for opartej na zakresie, zobacz Range-based for — instrukcja (C++).
for ( init-expression ; cond-expression ; loop-expression )
statement;
Uwagi
Należy używać instrukcji for do konstruowania pętli, które muszą być wykonane określoną liczbę razy.
Instrukcja for składa się z trzech opcjonalnych części, jak pokazano w poniższej tabeli.
Elementy pętli for
Nazwa składni |
Kiedy wykonywane |
Opis |
---|---|---|
init-expression |
Przed innym elementem z instrukcji for, init-expression jest wykonywane tylko raz.Następnie sterowanie przechodzi do cond-expression. |
Często używane do zainicjowania indeksów pętli.Może zawierać wyrażenia lub deklaracje. |
cond-expression |
Przed wykonaniem każdej iteracji statement, łącznie z pierwszą iteracją.statement jest wykonywana tylko wtedy, gdy cond-expression zwraca wartość true (niezerową). |
Wyrażenie obliczane do typu całkowitoliczbowego lub typu klasy, która ma jednoznaczną konwersję na typ całkowitoliczbowy.Normalnie używane do sprawdzania kryteriów zakończenia pętli for. |
loop-expression |
Na końcu każdej iteracji statement.Po wykonaniu loop-expression jest obliczane cond-expression. |
Zwykle jest używane do zwiększania indeksów pętli. |
Poniższe przykłady pokazują różne sposoby wykorzystania instrukcji 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: 012
init-expression i loop-expression mogą zawierać wiele instrukcji, oddzielonych przecinkami.Na przykład:
#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 można zwiększać, zmniejszać lub modyfikować w inny sposób.
#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
Pętla for zostaje zakończona, gdy wewnątrz statement wykonywane jest break, return lub goto (do oznaczonej instrukcji poza pętlą for).Instrukcja continue w pętli for kończy tylko bieżącą iterację.
Jeśli cond-expression jest pominięte, uważa się je za spełnione i pętla for nie zostanie zakończona bez break, return lub goto wewnątrz statement.
Chociaż trzy pola instrukcji for są zwykle używane do inicjowania, sprawdzania warunku zakończenia i inkrementacji, nie są ograniczone do tych zastosowań.Na przykład poniższy kod wyświetla cyfry od 0 do 4.W tym przypadku statement jest pustą instrukcją:
#include <iostream>
using namespace std;
int main()
{
int i;
for( i = 0; i < 5; cout << i << '\n', i++){
;
}
}
Pętle for i standard C++
Standard C++ mówi, że zmienna zadeklarowana w pętli for powinna wyjść poza zakres po zakończeniu pętli for.Na przykład:
for (int i = 0 ; i < 5 ; i++) {
// do something
}
// i is now out of scope under /Za or /Zc:forScope
Domyślnie pod /Ze, zmienna zadeklarowana w pętli for pozostaje w zakresie aż do zakończenia otaczającego zakresu pętli for.
/Zc:forScope włącza standardowe zachowanie zmiennych zadeklarowanych w pętlach for bez konieczności określania /Za.
Istnieje również możliwość użycia różnic zakresu pętli for do ponownego zadeklarowania zmiennych pod /Ze w następujący sposób:
// 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++ ) {}
}
Jest to bardziej ścisłe naśladowanie standardowego zachowania zmiennej zadeklarowanej w pętli for, które wymaga, aby zmienne zadeklarowane w pętli for wyszły poza zakres po zakończeniu pętli.Kiedy zmienna jest zadeklarowana w pętli for, kompilator wewnętrznie awansuje ją do zmiennej lokalnej w otaczającym zakresie pętli for, nawet jeśli zmienna lokalna o tej samej nazwie już istnieje.