(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.
(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.
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ère 4
.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 to int
- les deux sont redondants.
(+ 4)
n'est pas faire l'opérande+4
, cela signifie appliquer l'unaire +
à l'opérande 4
, 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 et sizeof +"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éral 4
), transtypée en type int
avec une conversion de style C et le résultat multiplié par 5
.
(int)-4*5