delphi – 类型推广重载函数的参数

前端之家收集整理的这篇文章主要介绍了delphi – 类型推广重载函数的参数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
请考虑以下代码
program Promote;

{$APPTYPE CONSOLE}

uses
  SysUtils;

{$HINTS OFF}

type
  MyWord = record
    FValue: LongWord;
    class operator Implicit(AValue: LongWord): MyWord;
  end;

class operator MyWord.Implicit(AValue: LongWord): MyWord;
begin
  Result.FValue:= AValue;
end;

procedure Test(AValue: MyWord); overload;
begin
  Writeln('MyWord');
end;

procedure Test(AValue: UInt64); overload;
begin
  Writeln('UInt64');
end;

var
  LW: LongWord;

begin
  Test(LW);
  Readln;
end.

当我运行它(Delphi XE)时,我看到编译器将LongWord参数推送到UInt64(内置类型),而不是MyWord(用户定义的类型).

我可以假设Delphi编译器总是将内置类型提升为内置类型,如果这样的升级是在编译器本身实现的?

在这种情况下(比如我们有2种内置类型,或2种用户定义的类型等),更通常地说什么规则控制类型的升级

解决方法

对于我的理解,像uint64这样的顺序类型将总是更接近另一个顺序类型,如长剑,而不是记录.期.

“更近的类型”距离不是关于“内置”或“自定义”类型.你正在比较苹果和橘子.

在编译器中,记录和序数是两个不同的家族.您可以定义隐式转换的事实不会促使记录成为序数类型.

因此,一个“内置”字符串将始终与一个整数比一个新的顺序类型更小的亲和力,如:

type TMyInteger64 = type Int46;

在这里,这个TMyInteger64类型将比内置的字符串类型“更接近”.

一旦定义了一个记录,它将与其他记录(不是顺序类型)具有亲和力.

原文链接:https://www.f2er.com/delphi/102635.html

猜你在找的Delphi相关文章