Выражения в С++
а+0.12)/6 х && у || !z t*sin(x)-1.05e4)/((2*к+2)*(2*к+3))Операции выполняются с приоритетами.
Для изменения порядка выполнения операций используются круглые скобки.
Если в одном выражении записано несколько операций одинакового приоритета, унарные операции, условная операция и операции присваивания выполняются справа налево, остальные — слева направо.
Пример (сюрприз)
а = b = с эквивалентно а = (b = с) а + b + с эквивалентно (а + b) + сПорядок вычисления подвыражений внутри выражений не определен.
Пример. Нельзя считать, что в выражении
(sin(x + 2) + cos(y + 1))обращение к синусу будет выполнено раньше, чем к косинусу, и что х+2 будет вычислено раньше, чем y+1.
Результат вычисления выражения характеризуется значением и типом.
Пример. Если а и b — переменные целого типа и описаны так: int а=2, b=5, то выражение а + b имеет значение 7 и тип int. Выражение а=b имеет значение, равное помещенному в переменную а (в данному случае 5) и тип, совпадающий с типом этой переменной.
В C++ допустимы выражения вида:
а = b = ссначала вычисляется выражение b=с, а затем его результат становится правым операндом для операции присваивания переменной а.
В выражение могут входить операнды различных типов. Если операнды имеют одинаковый тип, то результат операции будет иметь тот же тип. Если операнды разного типа, перед вычислениями выполняются преобразования типов по определенным правилам, обеспечивающим преобразование более коротких типов в более длинные для сохранения значимости и точности.
Преобразования двух типов:
• изменяющие внутреннее представление величин (с потерей точности или без потери точности);
• изменяющие только интерпретацию внутреннего представления.
Примеры:
К первому типу относится, например, преобразование целого числа в вещественное (без потери точности) и наоборот (возможно, с потерей точности), ко второму — преобразование знакового целого в беззнаковое.
В любом случае величины типов
char, signed char, unsigned char, short int, unsigned short intпреобразуются в тип int, если он может представить все значения, или в unsigned int в противном случае.
После этого операнды преобразуются к типу наиболее длинного из них, и он используется как тип результата.
Программист может задать преобразования типа явным образом.