以下代码应该编译并使用许多其他类型进行编译.
但是,编译器报告"Constant对象不能作为var参数传递"错误 - 尽管变量显然是一个变量.
program CurrencyConstant;
{$APPTYPE CONSOLE}
var
GVar: Currency;
begin
FillChar(GVar, SizeOf(GVar), 0);
end.
Run Code Online (Sandbox Code Playgroud)
同样,过程中的局部变量也会出现同样的问题.
procedure TestCurrency;
var
LVar: Currency;
begin
FillChar(LVar, SizeOf(LVar), 0);
end;
Run Code Online (Sandbox Code Playgroud)
我怀疑它与FillChar编译器魔术程序有关,这Dest是一个无类型的var参数. FillChar是我发现这个问题的唯一例程.
为了回应不可避免的"为什么要做那个评论":我们有一个代码生成器,它使用FillChar来一般地初始化记录结构和原始类型.它适用于其他一切,但出乎意料地失败了货币.我们确实有解决方法,但了解根本原因会很好,并且知道是否还有其他因素可能会给我们带来麻烦.
根据Jeroen的回答,可以合理地得出结论,这个问题存在于Delphi的所有部分中.此外,货币阵列显然也出现了类似的问题.
大卫的回答提供了一些很好的解决方法.
要考虑的最后一个解决方法是,修改生成器以处理Currency作为特例并简单地设置Value := 0.