(int) + 4*5;
¿Por qué es posible esto (agregar un tipo con un valor) ? (probado con g ++ y gcc.)
Sé que no tiene sentido (y no tiene ningún efecto), pero quiero saber por qué esto es posible.
(int) + 4*5;
¿Por qué es posible esto (agregar un tipo con un valor) ? (probado con g ++ y gcc.)
Sé que no tiene sentido (y no tiene ningún efecto), pero quiero saber por qué esto es posible.
cppinsights
que ayuda a comprender cómo se ve el código desde la perspectiva del frontend del compilador. También tiene una versión en línea, puede ver lo que dice sobre su ejemplo (el mismo 'paréntesis' que las respuestas que le dieron)
+(int)+ 4*5;
y -(int)- 4*5;
y -+-+-(int)-+-+- 4*5;
y menos poéticamente;
Respuestas:
El +
aquí es unario +
operador , no el operador de suma binaria . No hay nada más sucediendo aquí.
Además, la sintaxis (int)
se utiliza para encasillamiento.
Puede volver a leer esa declaración como
(int) (+ 4) * 5;
que se analiza como
((int) (+ 4)) * (5);
que dice,
+
operador unario en el valor constante entero 4
.int
5
Esto es similar a (int) (- 4) * (5);
, donde el uso del operador unario es más familiar.
En su caso, el unario +
y el elenco int
, ambos son redundantes.
(+ 4)
no es hacer el operando+4
, significa aplicar el unario +
al operando 4
, que de hecho no es una operación en el caso del OP, pero podría causar promoción de enteros o decaimiento de matriz en otras circunstancias. Por ejemplo, char c = 0; sizeof +c == sizeof c
probablemente sea falso y sizeof +"a"
probablemente no sea 2.
42;
:-)
Esto se interpreta como ((int)(+4)) * 5
. Es decir, una expresión +4
(un operador unario más aplicado a un literal 4
), convertido a tipo int
con un estilo C y el resultado multiplicado por 5
.
(int)-4*5