(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.
c++
c
casting
language-lawyer
Ernest Bredar
fuente
fuente
(int)-4*5
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 entero4
.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 elencoint
, ambos son redundantes.fuente
(+ 4)
no es hacer el operando+4
, significa aplicar el unario+
al operando4
, 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 ysizeof +"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 literal4
), convertido a tipoint
con un estilo C y el resultado multiplicado por5
.fuente