为什么我可以在德尔福中按变体划分单身,它的用途是什么



我很惊讶地看到,浮点值可以除以德尔菲中的一个变体。一个简单的例子可以做什么:

var
  v: Variant;
begin
  v := 2.3;
  Tag := 5.1 div v; // 2
  Tag := 5.1 mod v; // 1
  Tag := 5.1 div 2; // [dcc32 Error] E2015 Operator not applicable to this operand type
  Tag := 5.1 mod 2; // [dcc32 Error] E2015 Operator not applicable to this operand type
end;

看起来德尔福在进行div/mod操作之前对左侧和右侧进行了四舍五入。

我希望上面的代码在编译时在所有 4 行中产生错误,因为我的理解是div/mod 无论如何都不适用于浮点值。显然情况并非如此。

为什么我可以在德尔福中将单身除以变体,它需要什么?

来自表达式中的变体:

如果表达式将变量与静态类型值组合在一起,则静态类型值将自动转换为变量。

这意味着浮点类型文本首先转换为变体。

然后,在执行div/mod 操作之前,将两个变体隐式转换为整数值以匹配运算符。变体类型转换

..它需要什么?

只是为了尽可能通用并完全支持 OLE。

最新更新