Страница 51 из 82
Выражение Выражение ::= ВыражениеПрисваивания ::= Выражение , ВыражениеПрисваивания В контексте, где запятая выступает в роли разделителя, например, списке параметров вызова функции или в списке инициализации, запятая как знак операции может появиться только в круглых скобках: MyFun(a, (w = 5, w + 9), c) /* Выражение вызова функции с тремя параметрами. Значение второго параметра задаётся выражением, значение которого равно 14. */
Большая часть выражений представляет собой сочетание символов операций и операндов. Однако это вовсе не означает, что в ходе вычисления значения подобных выражений непременно будут применяться соответствующие операции. Выражение - это видимость. В каждом конкретном случае всё зависит от типа операндов. Если операнды оказываются операндами основного типа, либо указателями, то можно предположить, что при вычислении его значения будет выполняться конкретная операция C++. Если же операнды выражения оказываются операндами производного типа, символ операции может оказаться эквивалентным вызову операторной функции. И кто знает, что делает эта самая операторная функция. Выражения присваивания ВыражениеПрисваивания ::= УсловноеВыражение ::= УнарноеВыражение ОперацияПрисваивания ВыражениеПрисваивания ОперацияПрисваивания ::= = | *= | /= | %= | += | -= | >>= | <<= | &= | ^= | |=
Условные и логические выражения УсловноеВыражение ::= ВыражениеИлиЛогическое ::= ВыражениеИлиВключающее ? Выражение : УсловноеВыражение ВыражениеИЛогическое ::= ВыражениеИлиВключающее ::= ВыражениеИЛогическое && ВыражениеИлиВключающее ВыражениеИлиЛогическое ::= ВыражениеИЛогическое ::= ВыражениеИлиЛогическое || ВыражениеИЛогическое Побитовые выражения ВыражениеИлиВключающее ::= ВыражениеИлиИсключающее ::= ВыражениеИлиВключающее | ВыражениеИлиИсключающее ВыражениеИлиИсключающее ::= ВыражениеИ ::= ВыражениеИлиИсключающее ^ ВыражениеИ ВыражениеИ ::= ВыражениеРавенства ::= ВыражениеИ & ВыражениеРавенства Выражения равенства ВыражениеРавенства ::= ВыражениеОтношения ::= ВыражениеРавенства == ВыражениеОтношения ::= ВыражениеРавенства != ВыражениеОтношения Выражения отношения ВыражениеОтношения ::= ВыражениеСдвига ::= ВыражениеОтношения < ВыражениеСдвига ::= ВыражениеОтношения > ВыражениеСдвига ::= ВыражениеОтношения <= ВыражениеСдвига ::= ВыражениеОтношения >= ВыражениеСдвига Выражения сдвига ВыражениеСдвига ::= АддитивноеВыражение ::= ВыражениеСдвига << АддитивноеВыражение ::= ВыражениеСдвига >> АддитивноеВыражение Аддитивные выражения АддитивноеВыражение ::= МультипликативноеВыражение ::= АддитивноеВыражение + МультипликативноеВыражение ::= АддитивноеВыражение - МультипликативноеВыражение Мультипликативные выражения МультипликативноеВыражение ::= pmВыражение ::= МультипликативноеВыражение * pmВыражение ::= МультипликативноеВыражение / pmВыражение ::= МультипликативноеВыражение % pmВыражение Выражения с указателями pmВыражение ::= ВыражениеПриведения ::= pmВыражение .* ВыражениеПриведения ::= pmВыражение ->* ВыражениеПриведения Выражение приведения Для преобразования данного значения к определённому типу используется выражение явного преобразования (одна из разновидностей постфиксного выражения). Оно имеет вид функциональной формы записи: имя типа, за которым в скобочках записывается список выражений. Кроме того, в C++ существует каноническая форма записи выражения приведения. ВыражениеПриведения ::= УнарноеВыражение ::= (ИмяТипа) ВыражениеПриведения Основные ограничения на типы операндов и особенности выполнения соответствующих операций также ранее уже обсуждались. |