if (i) ++i;
Скобки вокруг выражения i являются обязательными. Выражение в скобках может быть совершенно произвольным, но с одним условием: оно должно возвращать скалярную величину, которую можно сравнивать с нулем. Предыдущий пример может быть переписан в следующем виде:
if (i != 0);
++i;
Оба эти варианта эквивалентны. В первом случае сравнение с нулем подразумевается, во втором — присутствует явно. Многие программисты предпочитают первый вариант: и набирать меньше, да и так, в принципе, все ясно. Когда величина может быть равна нулю? Для типов bool (false), short (0), int (0), long (OL), float (0.0) и double (0.0) ответ очевиден. А если это символы или указатели? Нулевым значением типа char является \о. Указатели равны нулю в том случае, если они имеют значение NULL или о.
char *str;
str = new char[10];
if (str)
strcpytstr, "a string");
Значения float и double может быть довольно сложно проверить на равенство нулю: могут сказываться ошибки округления в предшествующих вычислениях. Обычно величины этих типов не рекомендуется использовать в проверках на равенство. Тем не менее случается так, что надо подвергнуть проверке именно величины типа float или double. Допустим, что значение типа float необходимо проверить на равенство (или приблизительное равенство) некоей величине п. Также допустим, что требуемая точность сравнения лежит в пределах o.oooooooi. Необходимо установить, находится ли проверяемая величина в пределах заданной точности от п. Проиллюстрируем это следующим примером:
const float epsilon = 0.00000001;
if ((х > n-epsilon) && (х < n+epsilon))
cout « "х достаточно точно равно n\n";
Часто проверяемое в операторе if выражение является логическим выражением или сравнением; например, в этом примере присутствует их комбинация. '
Как уже говорилось ранее, составной оператор может быть помещен в любое место программы, в котором может находиться одиночный оператор. Стало быть, выражение, следующее после if может являться составным оператором:
8 Зак. 306