(int) + 4*5;
Pourquoi est-ce possible (ajouter un type avec une valeur) ? (essayé avec g ++ et gcc.)
Je sais que cela n'a pas de sens (et n'a aucun effet), mais je veux savoir pourquoi c'est possible.
c++
c
casting
language-lawyer
Ernest Bredar
la source
la source
(int)-4*5
cppinsights
qui permet de comprendre à quoi ressemble le code du point de vue du frontend du compilateur. Il a également une version en ligne, vous pouvez voir ce qu'il raconte sur votre exemple (la même `` parenthèse '' que les réponses qui vous ont été données)+(int)+ 4*5;
et-(int)- 4*5;
et-+-+-(int)-+-+- 4*5;
et moins poétiquement;
Réponses:
L'
+
ici est un+
opérateur unaire , pas l' opérateur d'addition binaire . Aucun ajout ne se produit ici.En outre, la syntaxe
(int)
est utilisée pour le typage.Vous pouvez relire cette déclaration comme
(int) (+ 4) * 5;
qui est analysé comme
((int) (+ 4)) * (5);
qui dit,
+
opérateur unaire sur la valeur de constante entière4
.int
5
Ceci est similaire à
(int) (- 4) * (5);
, où l'utilisation de l'opérateur unaire est plus familière.Dans votre cas, l'unaire
+
et le cast toint
- les deux sont redondants.la source
(+ 4)
n'est pas faire l'opérande+4
, cela signifie appliquer l'unaire+
à l'opérande4
, qui est en effet un no-op dans le cas de l'OP, mais pourrait provoquer une promotion entière ou une décroissance du tableau dans d'autres circonstances. Par exemple,char c = 0; sizeof +c == sizeof c
c'est probablement faux etsizeof +"a"
probablement pas 2.42;
:-)Ceci est interprété comme
((int)(+4)) * 5
. Autrement dit, une expression+4
(un opérateur unaire plus appliqué à un littéral4
), transtypée en typeint
avec une conversion de style C et le résultat multiplié par5
.la source