Эти операторы задают виды цикла.
оператор-цикла:
while ( выражение ) оператор
do оператор while ( выражение )
for ( оператор-иниц выражение opt; выражение opt) оператор
оператор-иниц:
оператор-выражение
оператор-описание
Обратите внимание, что конструкция оператор-иниц кончается точкой с запятой.
Оператор в операторе-цикла не должен быть описанием.
В операторе while вложенный оператор выполняется до тех пор, пока значение выражения не станет равным нулю. Проверка происходит перед каждым выполнением оператора.
Выражение должно быть арифметического типа, или типа указателя, или типа класс, для которого существует однозначное преобразование в арифметический тип или тип указателя (§R.12.3).
В операторе do вложенный оператор выполняется до тех пор, пока значение выражения не станет равным нулю. Проверка происходит после каждого выполнения оператора.
Выражение должно быть арифметического типа, или типа указателя, или типа класс, для которого существует однозначное преобразование в арифметический тип или тип указателя (§R.12.3).
Оператор for
for ( оператор-иниц выражение-1 opt; выражение-2 opt) оператор
эквивалентен конструкции
оператор-иниц
while ( выражение-1 ) {
оператор
выражение-2 ;
}
за исключением того факта, что оператор continue в операторе for вызовет выполнение выражение-2 перед тем, как начать повторное вычисление выражения-1. Таким образом, первый оператор задает инициализацию для цикла, первое выражение производит проверку, выполняемую перед каждым шагом цикла, так что цикл завершается, когда выражение становится нулем, а второе выражение обычно задает приращение, и оно добавляется после каждого шага цикла. Первое выражение должно иметь арифметический тип, или тип указателя, или тип класса, для которого существует однозначное преобразование к арифметическому типу или типу указателя (§R.12.3).
Могут быть опущены одно или оба выражения. Если отсутствует выражение-1, то эквивалентный цикл с while имеет условие while(1).
Если оператор-иниц является описанием, область видимости имен, описанных в нем, простирается до конца блока, закрывающего оператор for.
Операторы перехода делают безусловную передачу управления.
оператор-перехода:
break ;
continue ;
return выражение opt;
goto идентификатор ;
По выходе из области видимости (каким бы образом это не произошло) вызываются деструкторы (§R.12.4) для всех объектов классов, построенных в этой области, которые еще не были уничтожены. Это относится как к явно описанным объектам, так и ко временным объектам (§R.12.2).
Оператор break может встретиться только в операторе цикла или переключателе, он приводит к окончанию ближайшего из объемлющих его операторов цикла или переключателей. Управление передается на оператор, следующий непосредственно за заканчиваемым, если такой есть.
R.6.6.2 Оператор continue
Оператор continue может встретиться только в операторе цикла и приводит к передаче управления в заголовок ближайшего из объемлющих операторов цикла, т.е. в конец цикла. Более точно можно сказать, что в каждом из операторов:
while (foo) { do { for (;;) {
// ... // ... // ...
contin: ; contin: ; contin: ;
} } while (foo); }
оператор continue, не относящийся ко внешним операторам цикла, эквивалентен оператору goto contin.
Возврат из функции в обратившуюся к ней функцию происходит с помощью оператора return.
Оператор return без выражения можно использовать только в функциях, которые не возвращают значение, т.е. в функциях, возвращающих значение типа void, или в конструкторах (§R.12.1) и деструкторах (§R.12.4). Оператор return с выражением можно использовать только в функциях, которые возвращают значение. Значение выражения передается в ту функцию,которая вызвала данную функцию. Если нужно, значение преобразуется к типу функции, в которой выполняется return, по тем же правилам как при инициализации. Это может привести к вызову конструктора или копированию временных объектов (§R.12.2). Выход из функции по концу эквивалентен возврату без выдаваемого значения, что является незаконным для функции, возвращающей значение.
Читать дальше