具有扩展类型结果的类运算符在BDS2006中不起作用?

时间:2015-10-30 07:49:17

标签: delphi operator-overloading delphi-2006

如果我尝试编译以下代码,我收到错误消息“E2010不兼容类型:'扩展'和'TMyRec'”为最后一行(E:= R):

type
  TMyRec = record
    class operator Implicit(Rec: TMyRec) : Integer;
    class operator Implicit(Rec: TMyRec) : Extended;
  end;

class operator TMyRec.Implicit(Rec: TMyRec) : Integer;
begin
  Result := 1;
end;

class operator TMyRec.Implicit(Rec: TMyRec) : Extended;
begin
  Result := 1;
end;

var
  R : TMyRec;
  B : Byte;
  E : Extended;

begin
  B := R; //this is OK
  E := R; //E2010 Incompatible types: 'Extended' and 'TMyRec'
end.

我让一位朋友尝试在XE中编译它 - 编译成功了。这是BDS2006中的一个错误吗?有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:0)

这确实是一个编译器缺陷。解决此问题的唯一方法是升级到解决缺陷的编译器版本。如果你不能这样做,你只需要以不同的方式编写代码。

FWIW,在我看来,使用Extended总是一个错误。此类型是非标准的,仅存在于x86上。在将来某个时候,如果您转到x64,您会发现Extended已映射到Double。此外,类型的对齐会导致内存访问性能下降,而将数据存储为Extended而不是Double的程序往往会明显变慢。