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

Delphi 具有扩展类型结果的类运算符在BDS2006中不起作用?,delphi,operator-overloading,delphi-2006,Delphi,Operator Overloading,Delphi 2006,如果我尝试编译以下代码,我会在最后一行(E:=R)收到一条错误消息“E2010不兼容类型:'Extended'和'TMyRec'”: 我请一位朋友尝试用XE编译它——编译成功了。那么这是BDS2006中的一个bug吗?有没有办法解决这个问题?这确实是编译器的缺陷。修复该缺陷的唯一方法是升级到解决该缺陷的编译器版本。如果您不能做到这一点,您只需要以不同的方式编写代码 FWIW,在我看来,使用Extended总是一个错误。此类型是非标准的,仅存在于x86上。在将来的某个时候,如果您移动到x64,您会

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


我请一位朋友尝试用XE编译它——编译成功了。那么这是BDS2006中的一个bug吗?有没有办法解决这个问题?

这确实是编译器的缺陷。修复该缺陷的唯一方法是升级到解决该缺陷的编译器版本。如果您不能做到这一点,您只需要以不同的方式编写代码


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

还感谢您提供有关
扩展
的额外信息。无论如何,在这种情况下,确切的类型是不相关的,因为编译器在选择任何实际类型时失败。
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.