Проверки
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
Последние комментарии