(int) + 4*5;
Por que isso (adicionar um tipo com um valor) é possível? (tentei com g ++ e gcc.)
Sei que não faz sentido (e não tem efeito), mas quero saber por que isso é possível.
(int) + 4*5;
Por que isso (adicionar um tipo com um valor) é possível? (tentei com g ++ e gcc.)
Sei que não faz sentido (e não tem efeito), mas quero saber por que isso é possível.
cppinsights
que ajuda a entender como o código se parece da perspectiva do front-end do compilador. Também tem uma versão online, você pode ver o que diz sobre o seu exemplo (o mesmo 'parênteses' das respostas que você recebeu)
+(int)+ 4*5;
e -(int)- 4*5;
e -+-+-(int)-+-+- 4*5;
e menos poeticamente;
Respostas:
O operador+
aqui é unário+
, não o operador de adição binária . Não há adição acontecendo aqui.
Além disso, a sintaxe (int)
é usada para conversão de tipos.
Você pode reler essa declaração como
(int) (+ 4) * 5;
que é analisado como
((int) (+ 4)) * (5);
que diz,
+
operador unário no valor da constante inteira 4
.int
5
Isso é semelhante a (int) (- 4) * (5);
, onde o uso do operador unário é mais familiar.
No seu caso, o unário +
e o elenco para int
- ambos são redundantes.
(+ 4)
não é fazer o operando+4
, significa aplicar o unário +
ao operando 4
, o que de fato é um no-op no caso do OP, mas pode causar promoção de inteiro ou decaimento do array em outras circunstâncias. Por exemplo, char c = 0; sizeof +c == sizeof c
provavelmente é falso e sizeof +"a"
provavelmente não é 2.
42;
:-)
Isso é interpretado como ((int)(+4)) * 5
. Ou seja, uma expressão +4
(um operador de adição unário aplicado a um literal 4
), convertido para o tipo int
com um lançamento no estilo C e o resultado multiplicado por 5
.
(int)-4*5