Бьерн Страуструп. Язык программирования С++



бет27/124
Дата16.07.2016
өлшемі3.27 Mb.
#204081
түріКнига
1   ...   23   24   25   26   27   28   29   30   ...   124

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
count) // ...
сначала проверяется значение p, и только если оно не равно нулю, то

проверяется отношение l


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; // синтаксическая ошибка

3.3.2 Оператор goto


Презираемый оператор goto все-таки есть в С++:


goto идентификатор;
идентификатор: оператор
Вообще говоря, он мало используется в языках высокого уровня, но

может быть очень полезен, если текст на С++ создается не человеком,

а автоматически, т.е. с помощью программы. Например,

операторы goto используются при создании анализатора по заданной

грамматике языка с помощью программных средств.

Кроме того, операторы goto могут пригодиться в тех случаях,

когда на первый план выходит скорость работы программы. Один из

них - когда в реальном времени происходят какие-то вычисления во

внутреннем цикле программы.

Есть немногие ситуации и в обычных программах, когда применение

goto оправдано. Одна из них - выход из вложенного цикла или

переключателя. Дело в том, что оператор break во вложенных циклах

или переключателях позволяет перейти только на один уровень выше.

Приведем пример:


void f()

{

int i;



int j;
for ( i = 0; i < n; i++)

for (j = 0; j

if (nm[i][j] == a) goto found;

// здесь a не найдено

// ...

found:


// nm[i][j] == a

}
Есть еще оператор continue, который позволяет перейти на конец

цикла. Что это значит, объяснено в $$3.1.5.



Достарыңызбен бөлісу:
1   ...   23   24   25   26   27   28   29   30   ...   124




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет