logo search
volkov / C++ / Бьерн Страуструп-Справочное руководство по С++

R.5.3 Унарные операции

Выражения с унарными операциями выполняются справа налево.

унарное-выражение:

постфиксное-выражение

++ унарное выражение

-- унарное выражение

унарная-операция выражение-приведения

sizeof унарная-операция

sizeof ( имя-типа )

выражение-размещения

выражение-освобождения

унарная-операция: один из

* & + - ! ~

Унарная операция * означает косвенность: выражение должно быть

указателем, а результат является адресом, ссылающимся на объект, на

который указывает выражение. Если тип выражения есть "указатель на T",

то тип результата будет "T".

Результатом унарной операции & будет указатель на ее операнд.

Операнд должен быть функцией или адресом или конструкцией

уточненное-имя. Для первых двух случаев, если тип выражения

есть "T", то тип результата будет "указатель на T". В частности,

адрес объекта типа const T имеет тип const T*, тоже верно для

volatile. Для случая уточненное имя если член класса "C" не является

статическим и имеет тип "T", то тип результата операции будет

"указатель на член C типа T". Для статических членов типа T

результатом будет обычный "указатель на T". Адрес перегруженной

функции ($$R.13) можно брать только при инициализации или

присваивании, в котором левая часть однозначно определяет какая

версия перегруженной функции имеется ввиду ($R13.3).

Операнд унарной операции + должен быть арифметического типа

или типа указатель и результатом будет значение операнда. Для

целочисленных операндов производится стандартное преобразование

целочисленных. Тип результата есть тип преобразованного операнда.

Операнд унарной операции - должен иметь арифметический тип и

результатом будет изменение знака операнда. Для целочисленных

операндов выполняется стандартное преобразование целочисленных.

Операция для беззнаковых величин выполняется с помощью вычитания

значения операнда из 2**n, где n число битов в представлении

преобразованного операнда. Тип результата есть преобразованного

операнда.

Операнд операции логического отрицания ! должен иметь

арифметический тип или быть указателем, результат равен 1, если

значение операнда есть 0, и равен 0, если операнд не равен 0.

Тип результата есть int.

Операнд операции ~ должен иметь целочисленный тип, результатом

будет обращение двоичного представления операнда. Выполняются

стандартные преобразования целочисленных. Тип результата есть

тип преобразованного операнда.