Цикл 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
|