delphi – 类型推广重载函数的参数
发布时间:2020-12-15 06:10:22 所属栏目:大数据 来源:网络整理
导读:请考虑以下代码: 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 Resul
请考虑以下代码:
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类型将比内置的字符串类型“更接近”. 一旦定义了一个记录,它将与其他记录(不是顺序类型)具有亲和力. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |