C++. Бархатный путь. Часть 1 - Унарное выражение

ОГЛАВЛЕНИЕ

 

Унарное выражение

УнарноеВыражение ::= ПостфиксноеВыражение
::= ++ УнарноеВыражение
::= -- УнарноеВыражение
::= УнарнаяОперация ВыражениеПриведения
::= sizeof УнарноеВыражение
::= sizeof (ИмяТипа)
::= ВыражениеРазмещения
::= ВыражениеОсвобождения
УнарнаяОперация ::= * | & | + | - | ! | ~

Унарные выражения группируются справа налево.

Вторая и третья БНФ являются основой для построения префиксных выражений увеличения и уменьшения (инкремента и декремента). Символ операции в выражении инкремента и декремента вовсе не означает, что в ходе вычисления значения выражения к операндам будут применяться операции уменьшения и увеличения. В сочетании с операндами производных типов определение значений этих выражений сопровождается вызовами специальных (операторных) функций.

В выражениях, представленных четвёртой БНФ, унарная операция * является операцией разыменования. Типом выражения приведения является указатель на объект типа X, а это указывает на то, что описываемое значение является l-выражением. Значением выражения является значение размещённого в памяти объекта. Если типом операнда является тип указатель на объект типа X, то типом выражения является непосредственно тип X.

Результатом операции & является адрес объекта, представленного операндом. При этом операнд операции может оказаться либо l-выражением, либо квалифицированным именем. Но об этом позже.

Далее приводится множество БНФ, определяющих синтаксис выражений размещения и освобождения. У этих выражений достаточно сложная семантика. Детально разобрать их в данный момент мы пока просто не сможем. На этом этапе придётся ограничиться лишь самыми необходимыми сведениями.