是否为集合记录了乘法运算符?

Gra*_*ter 6 delphi set

我今天注意到了这段代码,并想知道这些类型的操作是否记录在某处以及为什么这样做(性能等).

var
  Shift: TShiftState
begin
  if [ssShift, ssCtrl] * Shift <> [] then
  begin
    ...
  end;
end;
Run Code Online (Sandbox Code Playgroud)

从我的测试看起来它只是看着像这样的代码检查Shift是否包含ssShiftssCtrl.这是记录在案的行为,还是只是利用集合内部实际存储为整数的事实?

Ken*_*ite 13

当与集合一起使用时,这不是乘法运算符; 它是交叉点运算符.这是记录在案的,并且自德尔福之前就开始了.请参阅表达式,尤其是有关设置操作的部分.它们是联合,交集,子集和超集,平等,不平等和成员资格的标准数学运算符.

以下是文档表格的摘要:

Operator  Operation     Operand Types  Result Type  Example  
--------  ---------     -------------  -----------  -------
+          union        set            set          Set1 + Set2 
-          difference   set            set          S - T 
*          intersection set            set          S * T 
<=         subset       set            Boolean      Q <= MySet 
>=         superset     set            Boolean      S1 >= S2 
=          equality     set            Boolean      S2 = MySet 
<>         inequality   set            Boolean      MySet <> S1 
in         membership   ordinal, set   Boolean      A in Set1