(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.
c++
c
casting
language-lawyer
Ernest Bredar
fonte
fonte
(int)-4*5
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 inteira4
.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 paraint
- ambos são redundantes.fonte
(+ 4)
não é fazer o operando+4
, significa aplicar o unário+
ao operando4
, 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 esizeof +"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 literal4
), convertido para o tipoint
com um lançamento no estilo C e o resultado multiplicado por5
.fonte