(int) + 4*5;
Почему это (добавление типа со значением) возможно? (пробовал с g ++ и gcc.)
Я знаю, что это не имеет смысла (и не имеет никакого эффекта), но я хочу знать, почему это возможно.
(int) + 4*5;
Почему это (добавление типа со значением) возможно? (пробовал с g ++ и gcc.)
Я знаю, что это не имеет смысла (и не имеет никакого эффекта), но я хочу знать, почему это возможно.
cppinsights
который помогает понять, как выглядит код с точки зрения внешнего интерфейса компилятора. У него также есть онлайн-версия, вы можете увидеть, что он рассказывает о вашем примере (те же скобки, что и в ваших ответах)
+(int)+ 4*5;
и -(int)- 4*5;
и -+-+-(int)-+-+- 4*5;
и менее поэтично;
Ответы:
+
Здесь унарный +
оператор , а не бинарный оператор сложения . Здесь ничего не происходит.
Также синтаксис (int)
используется для приведения типов.
Вы можете перечитать это заявление как
(int) (+ 4) * 5;
который разбирается как
((int) (+ 4)) * (5);
который говорит,
+
оператор к целочисленному постоянному значению 4
.int
5
Это похоже на то (int) (- 4) * (5);
, где использование унарного оператора более привычно.
В вашем случае унарный +
и приведенный к int
- оба избыточны.
(+ 4)
не является операндом+4
, это означает применение унарного +
к операнду 4
, что действительно не работает в случае OP, но может вызвать целочисленное продвижение или распад массива в других обстоятельствах. Например char c = 0; sizeof +c == sizeof c
, вероятно, это ложь, а sizeof +"a"
скорее всего не 2.
42;
:-)
Это интерпретируется как ((int)(+4)) * 5
. То есть выражение +4
(унарный оператор плюса, применяемое к литералу 4
), приведенное к типу int
с приведением в стиле C, и результат, умноженный на 5
.
(int)-4*5