(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.
cppinsightsqui 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.int5Ceci 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 cc'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 intavec une conversion de style C et le résultat multiplié par 5.
(int)-4*5