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