Поделиться через


for оператор (C++)

Выполняет инструкцию многократно, пока условие не станет false. Сведения об инструкции на основе for диапазона см. в инструкции на основе for диапазона (C++). Дополнительные сведения об инструкции C++/CLI for each см. в статье for each. in

Синтаксис

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

Замечания

Используйте инструкцию for для создания циклов, которые должны выполнять указанное количество раз.

Инструкция for состоит из трех необязательных частей, как показано в следующей таблице.

для элементов цикла

Имя синтаксиса При выполнении Описание
init-expression Перед выполнением любого другого элемента инструкции forinit-expression только один раз. Затем элемент управления передается cond-expressionв . Часто используется для инициализации индексов цикла. Он может содержать выражения или объявления.
cond-expression Перед выполнением каждой итерации, включая первую итерацию statement. statement выполняется только в том случае, если cond-expression значение равно true (ненулевое значение). Выражение, которое вычисляет целочисленный тип или тип класса, имеющий однозначное преобразование в целочисленный тип. Обычно используется для тестирования условий завершения цикла.
loop-expression В конце каждой итерации statement. После loop-expression выполнения cond-expression вычисляется. Обычно используется для увеличения индексов цикла.

В следующих примерах показаны различные способы использования инструкции 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 и loop-expression может содержать несколько инструкций, разделенных запятыми. Рассмотрим пример.

#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 можно увеличивать или уменьшать или изменять другими способами.

#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

for Цикл завершается при breakвыполнении оператора, возвращаемого или goto (к помеченной инструкции за пределами for цикла).statement Оператор continue в цикле for завершает только текущую итерацию.

Если cond-expression опущен, считается true, что for этот цикл не завершается без break, returnили goto внутри statement.

Хотя три поля for инструкции обычно используются для инициализации, тестирования для завершения и добавок, они не ограничиваются этими использованием. Например, следующий код выводит числа от 0 до 4. В этом случае statement используется инструкция NULL:

#include <iostream>
using namespace std;

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

for циклы и стандарт C++

Стандарт C++ говорит, что переменная, объявленная в цикле for , должна выйти из области после for завершения цикла. Рассмотрим пример.

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

По умолчанию переменная, объявленная в циклеfor, остается в области до тех пор, /Zeпока for заключиющая область цикла не заканчивается.

/Zc:forScope обеспечивает стандартное поведение переменных, объявленных в циклах без необходимости указывать /Za.

Кроме того, можно использовать различия for области цикла для повтора переменных /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++ ) {}
}

Это поведение более тесно имитирует стандартное поведение переменной, объявленной в цикле, которая требует переменных, объявленных в forfor цикле, чтобы выйти из области после завершения цикла. Когда переменная объявлена в for цикле, компилятор внутренне повышает его в локальную переменную в for заключающей области цикла. Он повышен, даже если есть уже локальная переменная с тем же именем.

См. также

Инструкции итерации
Ключевые слова
while оператор (C++)
do-while оператор (C++)
Оператор на основе for диапазона (C++)