Цикл 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 или не выполняет атомные или синхронизирующие операции), не завершается. Компиляторы могут удалить такие циклы.
Ключевые слова
Пример
#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