for – příkaz (C++)
Spustí příkaz opakovaně, dokud podmínka nebude nepravda.Další informace o rozsahovém příkazu For naleznete v tématu Příkaz For založený na rozsahu (C++).
for ( init-expression ; cond-expression ; loop-expression )
statement;
Poznámky
Příkaz for se používá k vytvoření smyček, které musí být provedeny podle zadaného počtu.
Příkaz for se skládá ze tří volitelných částí, jak je znázorněno v následující tabulce.
Prvky smyčky for
Název syntaxe |
Při provedení |
Popis |
---|---|---|
init-expression |
Před jakýmkoli jiným prvkem příkazu for je init-expression provedeno pouze jednou.Ovládací prvek pak předá cond-expression. |
Často se používá k inicializaci indexů smyčky.Může obsahovat výrazy nebo deklarace. |
cond-expression |
Před spuštěním každé iterace statement, včetně první iterace.statement se spustí, pouze pokud cond-expression vyhodnotí na pravda (není nula). |
Výraz, jehož výsledkem je integrální typ nebo typ třídy, která má jednoznačný převod na integrální typ.Obvykle se používá k testování kritérií pro ukončení smyčky. |
loop-expression |
Na konci každé iterace statement.Po provedení loop-expression se vyhodnotí cond-expression. |
Obvykle se používá pro zvýšení indexu smyčky. |
Následující příklady znázorňují různé způsoby použití příkazu 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 a loop-expression mohou obsahovat více příkazů oddělených čárkami.Příklad:
#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 může být zvýšen nebo snížen či jinak změněn.
#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
Smyčka for skončí, jakmile je v rámci statement vykonán příkaz break, return nebo goto (na označený příkaz mimo smyčku for).Příkaz continue ve smyčce for ukončí pouze aktuální iteraci.
Pokud je cond-expression vynechán, považuje se za true a smyčka for nebude bez break, return nebo goto v statement ukončena.
Přestože jsou tři pole příkazu for obvykle používána pro inicializaci, ukončení, testování a zvyšování hodnoty, nejsou omezena na tato použití.Následující kód například tiskne čísla 0 až 4.V tomto případě je statement příkaz null:
#include <iostream>
using namespace std;
int main()
{
int i;
for( i = 0; i < 5; cout << i << '\n', i++){
;
}
}
Smyčky for a standard jazyka C++
Standard jazyka C++ říká, že proměnná deklarovaná ve smyčce for se po skončení smyčky for dostane mimo obor.Příklad:
for (int i = 0 ; i < 5 ; i++) {
// do something
}
// i is now out of scope under /Za or /Zc:forScope
Ve výchozím nastavení v rámci /Ze, proměnná deklarovaná ve smyčce for zůstává v oboru až do ukončení nadřazeného oboru smyčky for.
/Zc:forScope povoluje standardní chování proměnných deklarovaných ve smyčkách for, aniž by bylo nutné určit /Za.
Takto je také možné použít rozdíly oboru smyčky for k předeklarování proměnných v rámci /Ze:
// 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++ ) {}
}
Toto lépe napodobuje standardní chování proměnné deklarované ve smyčce for, což vyžaduje, aby se proměnné deklarované ve smyčce for po jejím dokončení dostaly mimo obor.Pokud je proměnná deklarována ve smyčce for, kompilátor ji interně zvýší úroveň na místní proměnnou v oboru nadřazeném smyčce for, i v případě, že již existuje místní proměnná se stejným názvem.