Справочное руководство по C++
9. Операторы
Операторы выполняются последовательно во всех случаях кроме особо оговоренных.
9.1 Оператор выражение
Большинство операторов является операторами выражение, которые имеют вид
выражение ;
Обычно операторы выражение являются присваиваниями и вызовами функций.
9.2 Составной оператор, или блок
Составной оператор (называемый также "блок", что эквивалентно) дает возможность использовать несколько операторов в том месте, где предполагается использование одного:
составной_оператор:
{ список_описаний opt список_операторов opt }
список_описаний:
описание
описание список_описаний
список_операторов:
оператор
оператор список_операторов
Если какой-либо из идентификаторов в списке_описаний был ранее описан, то внешнее описание выталкивается на время выполнения блока, и снова входит в силу по его окончании.
Каждая инициализация auto или register переменных производится всякий раз при входе в голову блока. В блок делать передачу; в этом случае инициализации не выполняются. Инициализации переменных, имеющих класс памяти static (#4.2) осуществляются только один раз в начале выполнения программы.
9.3 Условный оператор
Есть два вида условных операторов
if ( выражение ) оператор
if ( выражение ) оператор else оператор
В обоих случаях вычисляется выражение, и если оно не ноль, то выполняется первый подоператор. Во втором случае второй подоператор выполняется, если выражение есть 0. Как обычно, неоднозначность "else" разрешается посредством того, что else связывается с последним встреченным if, не имеющим else.
9.4 Оператор whilе
Оператор while имеет вид
while ( выражение ) оператор
Выполнение подоператора повторяется, пока значение выражения остается ненулевым. Проверка выполняется перед каждым выполнением оператора.
9.5 Оператор dо
Оператор do имеет вид
do оператор while (выражение);
Выполнение подоператора повторяется до тех пор, пока значение выражения не станет нулем. Проверка выполняется после каждого выполнения оператора.
9.6 Оператор for
Оператор for имеет вид
for ( выражение_1 opt ; выражение_2 opt ; выражение_3 opt )
оператор
Этот оператор эквивалентен следующему:
выражение_1;
while (выражение_2)
{
оператор
выражение_3;
}
Первое выражение задает инициализацию цикла; второе выражение задает осуществляемую перед каждой итерацией проверку, по которой производится выход из цикла, если выражение становится нулем; третье выражение часто задает приращение, выполняемое после каждой итерации.
Каждое или все выражения могут быть опущены. Отсутствие выражения_2 делает подразумеваемое while-предложение эквивалентным while(1); остальные опущенные выражения просто пропускаются в описанном выше расширении.
9.7 Оператор switch
Оператор switch вызывает передачу управления на один из нескольких операторов в зависимости от значения выражения. Он имеет вид
switch ( выражение ) оператор
Выражение должно быть целого типа или типа указателя. Любой оператор внутри оператора может быть помечен одним или более префиксом case следующим образом:
case константное_выражение :
где константное выражение должно иметь тот же тип что и выражение- переключатель; производятся обычные арифметические преобразования. В одном операторе switch никакие две константы, помеченные case, не могут иметь одинаковое значение. Константные выражения точно определяются в #15.
Может также быть не более чем один префикс оператора вида
default :
Когда выполнен оператор switch, проведено вычисление его выражения и сравнение его с каждой case константой. Если одна из констант равна значению выражения, то управление передается на выражение, следующее за подошедшим префиксом case. Если никакая case константа не соответствует выражению, и есть префикс default, то управление передается на выражение, которому он предшествует. Если нет соответствующих вариантов case и default отсутствует, то никакой из операторов в операторе switch не выполняется.
Префиксы case и default сами по себе не изменяют поток управления, который после задержки идет дальше, перескакивая через эти префиксы. Для выхода из switch см. break, #9.8.
Обычно зависящий от switch оператор является составным. В голове этого оператора могут стоять описания, но инициализации автоматических и регистровых переменных являются безрезультатными.
9.8 Оператор break
Оператор
break ;
прекращает выполнение ближайшего охватывающего while, do, for или switch оператора; управление передается на оператор, следующий за законченным.
9.9 Оператор contiпие
Оператор
continue ;
вызывает передачу управления на управляющую продолжением цикла часть наименьшего охватывающего оператора while, do или for; то есть на конец петли цикла. Точнее, в каждом из операторов
while (...) do for (...)
{ { {
... ... ...
contin:; contin:; contin:;
} } }
while (...);
continue эквивалентно goto contin. (За contin: следует пустой оператор, #9.13.)
9.10 Оператор returп
Возврат из функции в вызывающую программу осуществляется с помощью оператора return, имеющего один из двух видов:
return ;
return выражение ;
Первый может использоваться только в функциях, не возвращающих значения, т.е. в функциях с типом возвращаемого значения void. Вторая форма может использоваться только в функциях, не возвращающих значение; вызывающей функцию программе возвращается значение выражения. Если необходимо, то выражение преобразуется, как это делается при присваивании, к типу функции, в которой оно возникло. Обход конца функции эквивалентен возврату return без возвращаемого значения.
9.11 Оператор gotо
Можно осуществлять безусловную передачу управления с помощью оператора
goto идентификатор ;
Идентификатор должен быть меткой (#9.12), расположенной в текущей функции.
9.12 Помеченные операторы
Перед любым оператором может стоять префикс метка, имеющий вид
идентификатор :
который служит для описания идентификатора как метки. Метка используется только как объект для goto. Областью видимости метки является текущая функция, исключая любой подблок, в котором был переописан такой же идентификатор. См. #4.1.
9.13 Пустой оператор
Пустой оператор имеет вид
;
Пустой оператор используется для помещения метки непосредственно перед } составного оператора или того, чтобы снабдить такие операторы, как while, пустым телом.
9.14 Оператор deletе
Оператор delete имеет вид
delete выражение ;
Результатом выражения должен быть указатель. Объект, на который он указывает, уничтожается. Это значит, что после оператора уничтожения delete нельзя гарантировать, что объект имеет определенное значение; см. #17. Эффект от применения delete к указателю, не полученному из операции new (#7.1), не определен. Однако, уничтожение указателя с нулевым значением безопасно.
9.15 Оператор asм
Оператор asm имеет вид
asm ( строка) ;
Смысл оператора asm не определен. Обычно он используется для передачи информации через компилятор ассемблеру.
[ ВЕРНУТЬСЯ К ОГЛАВЛЕНИЮ ]
|