Пространства имён
Варианты
Действия

Цикл while

Материал из cppreference.com
< cpp‎ | language
 
 
 
Инструкции
Метки
метка : оператор
Операторы выражений
выражение ;
Составные операторы
{ оператор... }
Операторы выбора
if
switch
Операторы итерирования
while
do-while
for
диапазонный for(C++11)
Операторы переходов
break
continue
return
goto
Операторы объявления
объявление ;
Блоки try
try составной-оператор последовательность-обработчиков
Транзакционная память
synchronized, atomic_commit, и т.д. (ТС TM)
 

Повторно выполняет оператор, пока значение условия не станет false. Проверка проводится перед каждой итерацией.

Содержание

[править] Синтаксис

атрибуты (необязательно) while ( условие ) оператор
атрибуты (начиная с C++11) любое количество атрибутов
условие любое выражение, которое контекстно преобразуется в bool, или объявление одной переменной с инициализатором в виде скобок или равенства. Это выражение вычисляется перед каждой итерацией, и если оно дает false, цикл завершается. Если это объявление, инициализатор оценивается перед каждой итерацией, и если значение объявленной переменной преобразуется в false, цикл завершается.
оператор любой оператор, обычно составной, который является телом цикла

[править] Объяснение

Является ли оператор составным оператором или нет, он всегда вводит область видимости блока. Объявленные в нём переменные видны только в теле цикла, другими словами,

while (--x >= 0)
    int i;
// i выходит из области видимости

тоже, что и

while (--x >= 0) {
    int i;
} // i выходит из области видимости

Если условие является объявлением, таким как T t = x, объявленная переменная находится только в области видимости тела цикла и уничтожается и создаётся заново на каждой итерации, другими словами, такой цикл while эквивалентен

label:
{ // начало области видимости условия
    T t = x;
    if (t) {
        statement
        goto label; // вызывает деструктор t
    }
}

Если выполнение цикла необходимо прервать в какой-то момент, в качестве завершающего оператора можно использовать оператор break.

Если выполнение цикла необходимо продолжить в конце тела цикла, как сокращение можно использовать оператор continue.

[править] Примечание

Как часть гарантии продвижения вперёд C++, поведение не определено, если цикл, который не имеет наблюдаемого поведения (не выполняет вызовы функций Ввода/Вывода, не обращается к volatile объектам или не выполняет атомарные операции или операции синхронизации), не завершается. Компиляторам разрешено удалять такие циклы.

[править] Ключевые слова

while

[править] Пример

#include <iostream>
 
int main() {
    // цикл while с одним оператором
    int i = 0;
    while (i < 10)
         i++;
    std::cout << i << '\n';
 
    // цикл while с составным оператором
    int j = 2;
    while (j < 9) {
        std::cout << j << ' ';
        j += 2;
    }
    std::cout << '\n';
 
   // цикл while с объявлением в условии
   char cstr[] = "Привет";
   int k = 0;
   while (char c = cstr[k++])
       std::cout << c;
   std::cout << '\n';
}

Вывод:

10
2 4 6 8 
Привет

[править] Смотрите также