(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.
cppinsightsque 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.int5Isso é 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 cprovavelmente é 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 intcom um lançamento no estilo C e o resultado multiplicado por 5.
(int)-4*5