Delphi var参数的数据类型转换

时间:2017-03-27 16:53:41

标签: delphi

我有一个var Extended参数的函数。如果我在调用函数时尝试使用Double类型参数,编译器会抱怨。但是,如果我将Extended值作为函数Result传递回来(并分配给Double变量),那么编译器很高兴。

这是预期的吗?如果是这样,有没有办法欺骗编译器降低参数的精度以匹配参数?

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;

1 个答案:

答案 0 :(得分:3)

var参数要求实际参数完全匹配。您只能传递Extended变量。

您可以选择为您需要的每种浮点类型引入重载。但我的建议是停止使用Extended并切换到DoubleExtended类型仅存在于32个英特尔平台上,并且很少提供超过Double的任何优势。相反,它的10个字节的异常大小经常导致由于未对准和低效的高速缓存使用而导致的性能不佳。