Почему C и C ++ допускают выражение (int) + 4 * 5? - PullRequest
81 голосов
/ 21 апреля 2019
(int) + 4*5;

Почему это (добавление типа со значением) возможно?(пробовал с g ++ и gcc.)

Я знаю, что это не имеет смысла (и не имеет никакого эффекта), но я хочу знать, почему это возможно.

Ответы [ 2 ]

135 голосов
/ 21 апреля 2019

+ здесь унарный + оператор , а не двоичный оператор сложения . Здесь не происходит никаких дополнений.

Также для типов приведен синтаксис (int).

Вы можете перечитать это утверждение как

(int) (+ 4) * 5;    

который анализируется как

((int) (+ 4)) * (5);    

, который говорит,

  1. Применить унарный оператор + к целочисленной константе 4.
  2. Typecast для int
  3. умножить с операндом 5

Это похоже на (int) (- 4) * (5);, где использование унарного оператора более привычно.

В вашем случае унарный + и приведение к int - оба избыточны.

37 голосов
/ 21 апреля 2019

Это интерпретируется как ((int)(+4)) * 5. То есть выражение +4 (унарный оператор плюс, примененный к литералу 4), приведенное к типу int с приведением в стиле C, и результат, умноженный на 5.

...