Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Cpp_Страуструп.doc
Скачиваний:
16
Добавлен:
03.05.2015
Размер:
3.2 Mб
Скачать

3.3 Сводка операторов

Полное и последовательное описание операторов С++ содержится в

$$R.6. Советуем ознакомиться с этим разделом. Здесь же дается

сводка операторов и несколько примеров.

------------------------------------------------------------------

Синтаксис операторов

------------------------------------------------------------------

оператор:

описание

{ список-операторов opt }

выражение opt ;

if ( выражение ) оператор

if ( выражение ) оператор else оператор

switch ( выражение ) оператор

while ( выражение ) оператор

do оператор while ( выражение )

for (начальный-оператор-for выражение opt; выражение opt) оператор

case выражение-константа : оператор

default : оператор

break ;

continue ;

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

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

идентификатор : оператор

список-операторов:

оператор

список-операторов оператор

начальный-оператор-for:

описание

выражение opt ;

----------------------------------------------------------------------

Обратите внимание, что описание является оператором, но нет операторов

присваивания или вызова функции (они относятся к выражениям).

3.3.1 Выбирающие операторы

Значение можно проверить с помощью операторов if или switch:

if ( выражение ) оператор

if ( выражение ) оператор else оператор

switch ( выражение ) оператор

В языке С++ среди основных типов нет отдельного булевского (тип

со значениями истина, ложь). Все операции отношений:

== != < > <= >=

дают в результате целое 1, если отношение выполняется, и 0 в противном

случае. Обычно определяют константы TRUE как 1 и FALSE как 0.

В операторе if, если выражение имеет ненулевое значение,

выполняется первый оператор, а иначе выполняется второй (если

он указан). Таким образом, в качестве условия допускается любое выражение

типа целое или указатель. Пусть a целое, тогда

if (a) // ...

эквивалентно

if (a != 0) ...

Логические операции

&& || !

обычно используются в условиях. В операциях && и || второй операнд

не вычисляется, если результат определяется значением первого

операнда. Например, в выражении

if (p && l<p->count) // ...

сначала проверяется значение p, и только если оно не равно нулю, то

проверяется отношение l<p->count.

Некоторые простые операторы if удобно заменять выражениями

условия. Например, вместо оператора

if (a <= b)

max = b;

else

max = a;

лучше использовать выражение

max = (a<=b) ? b : a;

Условие в выражении условия не обязательно окружать скобками, но

если их использовать, то выражение становится понятнее.

Простой переключатель (switch) можно записать с помощью

серии операторов if. Например,

switch (val) {

case 1:

f();

break;

case 2:

g();

break;

default:

h();

break;

}

можно эквивалентно задать так:

if (val == 1)

f();

else if (val == 2)

g();

else

h();

Смысл обеих конструкций совпадает, но все же первая предпочтительнее,

поскольку в ней нагляднее показана суть операции: проверка на

совпадение значения val со значением из множества констант. Поэтому в

нетривиальных случаях запись, использующая переключатель, понятнее.

Нужно позаботиться о каком-то завершении оператора, указанного

в варианте переключателя, если только вы не хотите, чтобы стали

выполняться операторы из следующего варианта. Например,

переключатель

switch (val) { // возможна ошибка

case 1:

cout << "case 1\n";

case 2:

cout << "case 2\n";

default:

cout << "default: case not found\n";

}

при val==1 напечатает к большому удивлению непосвященных:

case 1

case 2

default: case not found

Имеет смысл отметить в комментариях те редкие случаи, когда стандартный

переход на следующий вариант оставлен намеренно. Тогда этот переход

во всех остальных случаях можно смело считать ошибкой. Для

завершения оператора в варианте чаще всего используется break, но

иногда используются return и даже goto. Приведем пример:

switch (val) { // возможна ошибка

case 0:

cout << "case 0\n";

case1:

case 1:

cout << "case 1\n";

return;

case 2:

cout << "case 2\n";

goto case1;

default:

cout << "default: case not found\n";

return;

}

Здесь при значении val равном 2 мы получим:

case 2

case 1

Отметим, что метку варианта нельзя использовать в операторе goto:

goto case 2; // синтаксическая ошибка