6
votes

Delphi Constant Constant Expressions

Probablement une question stupide, mais c'est une curiosité inutile pour moi.

J'ai un peu de code Delphi qui ressemble à ceci; xxx

(le But du code n'est pas vraiment important)

Le compilateur se voit-il "(1 shl keyrepeatbit)" comme quelque chose qui peut être calculé à l'heure de la compilation, et cela devient donc une constante? Sinon, il y aurait-il quelque chose à gagner en travaillant comme un numéro et en remplaçant l'expression avec un nombre?


0 commentaires

5 Réponses :


7
votes

Oui, le compilateur évalue l'expression au moment de la compilation et utilise la valeur de résultat comme constante. Il n'y a pas de gain pour déclarer une autre constante avec la valeur de résultat vous-même.

Edit: The_fox est correct. Constantes dactylographiques assignables (voir {$ J +} directive du compilateur) ne sont pas traités comme des constantes et l'expression est évaluée au moment de l'exécution dans ce cas.


2 commentaires

Merci, c'est tout ce dont j'avais besoin. :-)


Vous avez oublié des constantes d'écriture;) Dans ce cas, l'expression est évaluée au moment de l'exécution



3
votes

Il la convertit à une constante à l'heure de la compilation.

Cependant, même si ce n'est pas le cas, cela n'aurait aucun impact notable sur la performance de votre application.

Vous pouvez gérer quelques milliers de messages par seconde si votre application est occupée. Votre ancien Pentium je peux faire des gazillions de quarts de travail et de la seconde.

Gardez votre code lisible et profilez-le pour trouver des goulots d'étranglement que vous optimisez - généralement en regardant l'algorithme, et non aussi bas que vous changez ou non.


0 commentaires

2
votes

Je doute que l'utilisation d'un nombre (serait 1073741824, en passant) ici améliorerait vraiment les performances. Vous semblez être dans certains contextes de message Windows ici et cela permettra d'ajouter plus de retard qu'une seule et qui est rapide, même si le nombre n'est pas optimisé à l'heure compilée (de toute façon, je pense qu'il est optimisé).

La seule exception que je pourrais imaginer serait la case que ce morceau de code est exécuté vraiment souvent, mais comme je l'ai dit, je pense que cela est optimisé à la compilation et donc même dans ce cas ne fera pas de différence du tout.


0 commentaires

4
votes

Vous pouvez vous assurer que vous pouvez vous assurer que la destination de la destinaçabilité:

const
  KeyRepeatBit = 30;
  KeyRepeatMask = 1 shl KeyRepeatBit ;


1 commentaires

Pourquoi pas keyrepeatmask = 1 shl keyrepeatbit?



1
votes

Peut-être que c'est sur votre question, mais j'utilise un dossier de cas pour ce genre de choses, exemple: xxx

voir article sur mon blog pour plus de détails


0 commentaires