Spec-Zone.ru › C++

Цикл while

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

Синтаксис

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

Объяснение

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

while (--x >= 0)
    int i;
// i goes out of scope

эквивалентно

while (--x >= 0)
{
    int i;
} // i goes out of scope

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

label:
{ // start of condition scope
    T t = x;
    if (t)
    {
        statement
        goto label; // calls the destructor of t
    }
}

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

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

Примечания

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

Ключевые слова

while

Пример

#include <iostream>
 
int main()
{
    // while loop with a single statement
    int i = 0;
    while (i < 10)
         i++;
    std::cout << i << '\n';
 
    // while loop with a compound statement
    int j = 2;
    while (j < 9)
    {
        std::cout << j << ' ';
        j += 2;
    }
    std::cout << '\n';
 
   // while loop with a declaration condition
   char cstr[] = "Hello";
   int k = 0;
   while (char c = cstr[k++])
       std::cout << c;
   std::cout << '\n';
}

Вывод:

10
2 4 6 8
Hello

См. также

Документация по C для while

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/language/while

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API