3 votes

Conversion du type de données de Delphi var Parameter

J'ai une fonction qui a un var Extended paramètre. Le compilateur se plaint si j'essaie d'utiliser un paramètre Double lorsque j'appelle la fonction. Cependant, si je passe l'argument Extended en tant que fonction Result (et l'affecter à un Double ), alors le compilateur est heureux.

Est-ce normal ? Si c'est le cas, existe-t-il un moyen de tromper le compilateur pour qu'il réduise la précision du paramètre afin qu'il corresponde à l'argument ?

function foo1(var e: extended): boolean;
begin
  e := 0.0;
  Result := true;
end;

function foo2(): extended;
begin
  Result := 0.0;
end;

procedure CallFoo();
var
  d: double;
begin
  if foo1(d) then Exit; // compiler complains
  d := foo2; // compiler happy
end;

3voto

David Heffernan Points 292687

var exigent que l'argument réel corresponde exactement. Vous ne pouvez passer qu'un Extended variable.

Une option pour vous est d'introduire des surcharges pour chacun des types de virgule flottante dont vous avez besoin. Mais mon conseil est d'arrêter d'utiliser Extended et passer à Double . Le site Extended n'existe que sur les plates-formes 32 Intel et n'offre que très rarement des avantages par rapport à l'option Double . Au contraire, sa taille inhabituelle de 10 octets entraîne souvent de mauvaises performances en raison d'un mauvais alignement et d'une utilisation inefficace du cache.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X