(int) + 4*5;
Почему это (добавление типа со значением) возможно? (пробовал с g ++ и gcc.)
Я знаю, что это не имеет смысла (и не имеет никакого эффекта), но я хочу знать, почему это возможно.
c++
c
casting
language-lawyer
Эрнест Бредар
источник
источник
(int)-4*5
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
.источник