web-dev-qa-db-fra.com

Pourquoi C et C ++ autorisent-ils l'expression (int) + 4 * 5?

(int) + 4*5;

Pourquoi est-ce (en ajoutant un type avec une valeur) possible? (essayé avec g ++ et gcc.)

Je sais que cela n'a pas de sens (et n'a aucun effet), mais je veux savoir pourquoi cela est possible.

85
Ernest Bredar

Le + voici naire + opérateur , pas opérateur d'addition binaire . Il n'y a aucun ajout ici.

De plus, la syntaxe (int) est utilisé pour le transtypage.

Vous pouvez relire cette déclaration comme

(int) (+ 4) * 5;    

qui est analysé comme

((int) (+ 4)) * (5);    

qui dit:

  1. Appliquer l'unaire + opérateur sur la valeur constante entière 4.
  2. transtypé en int
  3. multiplier par l'opérande 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 transtypage en int - les deux sont redondants.

139
Sourav Ghosh

Ceci est interprété comme ((int)(+4)) * 5. Autrement dit, une expression +4 (opérateur unaire plus appliqué à un littéral 4), transtypé en type int avec une transposition de style C, et le résultat multiplié par 5.

39
Igor Tandetnik