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

<!--StartFragment -->
  • Проверки

  • Goto

Операторы C++ систематически и полностью изложены в #с.9, прочитайте, пожалуйста, этот раздел. А здесь приводится краткая сводка и некоторые примеры.

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


оператор:
описание
{список_операторов opt}
выражение opt
if ( выражение ) опреатор
if ( выражение ) оператор else оператор
switch ( выражение ) оператор
while ( выражение ) оператор
do оператор while (выражение)
for ( оператор выражение opt ; выражение opt ) оператор
case константное_выражение : оператор
default : оператор
break ;
continue ;
return выражение opt ;
goto идентификатор ;
идентификатор : оператор
список_операторов:
оператор
оператор список_операторов


Заметьте, что описание является оператором, и что нет операторов присваивания и вызова процедуры. Присваивание и вызов функции обрабатываются как выражения.

Проверки

Проверка значения может осуществляться или оператором if, или оператором switch:

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

В C++ нет отдельного булевского типа. Операции сравнения
 

 


== != < <= > >=
 

 


возвращают целое 1, если сравнение истинно, иначе возвращают 0. Не так уж непривычно видеть, что ИСТИНА определена как 1, а ЛОЖЬ определена как 0.
В операторе if первый (или единственный) оператор выполняется в том случае, если выражение ненулевое, иначе выполняется второй оператор (если он задан). Отсюда следует, что в качестве условия может использоваться любое целое выражение. В частности, если a целое, то

if (a) // ...

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

if (a != 0) // ...

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

 


&& || !
 

 


наиболее часто используются в условиях. Операции && и || не будут вычислять второй аргумент, если это ненужно. Например:

if (p && 1count) // ...

вначале проверяет, является ли p не нулем, и только если это так, то проверяет 1count.

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

Например:
 

 


if (a <= d)
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();
 

 


Смысл тот же, однако первый вариант (switch) предпочтительнее, поскольку в этом случае явно выражается сущность действия (сопоставление значения с рядом констант). Поэтому в нетривиальных случаях оператор switch читается легче.

Заботьтесь о том, что switch должен как-то завершаться, если только вы не хотите, чтобы выполнялся следующий case.

Например:
 

 


switch (val) { // осторожно
case 1:
cout << "case 1\\n";
case 2;
cout << "case 2\\n";
default:
cout << "default: case не найден\\n";
}
 

 


при val==1 напечатает

case 1
case 2
default: case не найден

к великому изумлению непосвященного. Самый обычный способ завершить случай - это break, иногда можно даже использовать 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 не найден\\n";
return;
}
 

 


При обращении к нему с val==2 выдаст

case 2
case 1

Заметьте, что метка case не подходит как метка для употребления в операторе goto:

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

Goto

C++ снабжен имеющим дурную репутацию оператором goto.

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

В общем, в программировании высокого уровня он имеет очень мало применений, но он может быть очень полезен, когда C++ программа генерируется программой, а не пишется непосредственно человеком. Например, операторы goto можно использовать в синтаксическом анализаторе, порождаемом генератором синтаксических анализаторов. Оператор goto может быть также важен в тех редких случаях, когда важна наилучшая эффективность, например, во внутреннем цикле какой- нибудь программы, работающей в реальном времени.

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

Например:

for (int i = 0; i



Опубликовал admin
23 Мар, Вторник 2004г.



Программирование для чайников.