3.2.1 Круглые скобки
3.2.1 Круглые скобки
Скобками синтаксис С++ злоупотребляет; количество спосбов их использования приводит в замешательство: они применются для заключения в них параметров в вызовах функций, в них заключается тип в преобразовании типа (приведении к типу), в именах типов для обозначения функций, а также для разрешения конфликтов приоритетов. К счастью, последнее требуется не слишком часто, потому что уровни приоритета и правила ассоцативности определены таким образом, чтобы выражения «работали ожидаемым образом» (то есть, отражали наиболее привычный спсоб употребления). Например, значение
if (i«=0 !! max«i) // ...
очевидно. Тем не менее, всегда, когда программист сомнвается относительно этих правил, следует употреблять скобки, и некоторые программисты предпочитают немного более длинное и менее элегантное
if ( (i«=0) !! (max«i) ) // ...
При усложнении подвыражений употребление скобок станвится более обычным явлением, но сложные подвыражения являюся источником ошибок, поэтому если вы чувствуете потребность в скобках, попробуйте оборвать выражение и использовать дополнительную переменную. Есть и такие случаи, когда приоритты операций не приводят к «очевидному» результату. Например в
if (i amp;mask == 0) // ...
не происходит применения маски mask к i и последующей проверки результата на ноль. Поскольку == имеет приоритет вше, чем amp;, выражение интерпретируется как i amp;(mask==0). В этом случае скобки оказываются важны:
if ((i amp;mask) == 0) // ...
Но, с другой стороны, то, что следующее выражение не рботает так, как может ожидать наивный пользователь, ничего не значит:
if (0 «= a «= 99) // ...
Оно допустимо, но интерпретируется оно как (0«=a)«=99, где результат первого подвыражения или 0 или 1, но не a (если только a не равно 1). Чтобы проверить, лежит ли a в диапазоне 0...99, можно написать
if (0«=a amp; amp; a«=99) // ...