(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.int5Это похоже на то (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