Справочное руководство по C++ | страница 34



R.6.5.3 Оператор for

>Оператор for

> for ( оператор-иниц выражение-1 >opt ; выражение-2 >opt ) оператор

эквивалентен конструкции

>оператор-иниц

>while ( выражение-1 ) {

> оператор

> выражение-2 ;

>}

за исключением того факта, что оператор continue в операторе for вызовет выполнение выражение-2 перед тем, как начать повторное вычисление выражения-1. Таким образом, первый оператор задает инициализацию для цикла, первое выражение производит проверку, выполняемую перед каждым шагом цикла, так что цикл завершается, когда выражение становится нулем, а второе выражение обычно задает приращение, и оно добавляется после каждого шага цикла. Первое выражение должно иметь арифметический тип, или тип указателя, или тип класса, для которого существует однозначное преобразование к арифметическому типу или типу указателя (§R.12.3).

Могут быть опущены одно или оба выражения. Если отсутствует выражение-1, то эквивалентный цикл с while имеет условие while(1).

Если оператор-иниц является описанием, область видимости имен, описанных в нем, простирается до конца блока, закрывающего оператор for.

R.6.6 Операторы перехода

Операторы перехода делают безусловную передачу управления.

>оператор-перехода:

> break ;

> continue ;

> return выражение >opt ;

> goto идентификатор ;

По выходе из области видимости (каким бы образом это не произошло) вызываются деструкторы (§R.12.4) для всех объектов классов, построенных в этой области, которые еще не были уничтожены. Это относится как к явно описанным объектам, так и ко временным объектам (§R.12.2).

R.6.6.1 Оператор break

Оператор break может встретиться только в операторе цикла или переключателе, он приводит к окончанию ближайшего из объемлющих его операторов цикла или переключателей. Управление передается на оператор, следующий непосредственно за заканчиваемым, если такой есть.

R.6.6.2 Оператор continue

Оператор continue может встретиться только в операторе цикла и приводит к передаче управления в заголовок ближайшего из объемлющих операторов цикла, т.е. в конец цикла. Более точно можно сказать, что в каждом из операторов:

>    while (foo) {      do  {           for (;;) {

>    // ...             // ...          // ...

>    contin: ;          contin: ;       contin: ;

>    }                  } while (foo);  }

оператор continue, не относящийся ко внешним операторам цикла, эквивалентен оператору goto contin.

R.6.6.3 Оператор return

Возврат из функции в обратившуюся к ней функцию происходит с помощью оператора return.