c++ c casting language-lawyer

¿Por qué C y C++ permiten la expresión(int)+4*5?



casting language-lawyer (2)

El + aquí es un operador + unario , no el operador de suma binaria . No hay ninguna adición ocurriendo aquí.

Además, la sintaxis (int) se utiliza para encasillamiento.

Puedes releer esa declaración como

(int) (+ 4) * 5;

que se analiza como

((int) (+ 4)) * (5);

que dice,

  1. Aplicar el operador unario + en el valor constante de entero 4 .
  2. encasillado a un int
  3. multiplicar con el operando 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 lanzamiento a int - ambos son redundantes.

(int) + 4*5;

¿Por qué es esto (agregar un tipo con un valor) posible? (probado con g ++ y gcc.)

Sé que no tiene sentido (y no tiene ningún efecto), pero quiero saber por qué esto es posible.


Esto se interpreta como ((int)(+4)) * 5 . Es decir, una expresión +4 (un operador más unario aplicado a un literal 4 ), convertida al tipo int con una conversión de estilo C, y el resultado multiplicado por 5 .