Betrachten Sie den folgenden Code ein:Typ Förderung der überladenen Funktion Argument
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.
Wenn ich es laufen (Delphi XE) Ich sehe, dass der Compiler LongWord
Parameter UInt64
(integrierter Typ) fördert, nicht zu MyWord
(benutzerdefinierter Typ).
Kann ich davon ausgehen, dass Delphi-Compiler immer einen integrierten Typ zu einem integrierten Typ fördert, wenn eine solche Promotion im Compiler selbst implementiert ist?
Allgemeiner, welche Regeln steuern Art Förderung in solchen Situationen (sagen wir haben 2 eingebaute Typen oder 2 benutzerdefinierte Typen, etc.)?
Viel Glück dabei zu arbeiten. Keine Dokumentation existiert. Das Beste, was Sie tun können, ist es umzukehren. –
Ich würde ** erwarten **, dass es immer der ** nächste ** Typ ist –
@Sir Es ist einfach, das zu schreiben, aber ohne eine genaue Definition der nächsten, was es bedeutet. Ich finde es sehr frustrierend, dass die Regeln für die Überladungsauflösung so unzureichend dokumentiert sind. –