|
||||
|
3.3.1 Проверки Проверка значения может осуществляться или оператором if, или оператором switch: if ( выражение ) оператор if ( выражение ) оператор else оператор switch ( выражение ) оператор В С++ нет отдельного булевского типа. Операции сравнения == != « „= “ »= возвращают целое 1, если сравнение истинно, иначе возращают 0. Не так уж непривычно видеть, что ИСТИНА определена как 1, а ЛОЖЬ определена как 0. В операторе if первый (или единственный) оператор выпоняется в том случае, если выражение ненулевое, иначе выполнется второй оператор (если он задан). Отсюда следует, что в качестве условия может использоваться любое целое выражение. В частности, если a целое, то if (a) // ... эквивалентно if (a != 0) // ... Логические операции amp; amp; !! ! наиболее часто используются в условиях. Операции amp; amp; и !! не будут вычислять второй аргмент, если это ненужно. Например: if (p amp; amp; 1«p-»count) // ... вначале проверяет, является ли p не нулем, и только если это так, то проверяет 1«p-»count. Некоторые простые операторы 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; // синтаксическая ошибка |
|
||