почему унарные операторы возвращают другой тип, чем их операнды? - PullRequest
2 голосов
/ 08 марта 2020

Похоже, что унарный побитовый оператор not (~) для uint16_t и uint8_t возвращает int, а не тип его операнда (то же самое для унарного -). Может кто-нибудь дать причину, почему это так?

Удивительно, что ~ uint16_t (0)

Я использую g ++ версии 9.2.1 20191008 (Ubuntu 9.2.1-9ubuntu2) x86_64- linux - гну

1 Ответ

4 голосов
/ 08 марта 2020

Из C ++ 11 Стандарт 5.3.1.8:

Операнд унарного оператора должен иметь арифметический c или тип перечисления с незаданной областью, и результатом будет отрицание своего операнда. Интегральное продвижение выполняется для целочисленных или перечислимых операндов. Отрицание числа без знака вычисляется путем вычитания его значения из 2 ^ n, где n - количество битов в повышенном операнде. Тип результата - это тип повышенного операнда.

Таким образом, говорится, что целочисленное продвижение происходит для унарных операторов.

...