德尔福有一些“快速”的运营商吗? (+ =, - =,...)

时间:2009-11-01 01:31:28

标签: delphi operators

非常简单的问题,但我在谷歌找不到答案

在delphi中,有没有办法缩短这种代码:

MyVar := MyVar + X;

就像在C ++中一样,我会做MyVar + = X;。鉴于它必须有多么微不足道和有用,但我找不到任何选择......

感谢您的帮助

6 个答案:

答案 0 :(得分:19)

您在寻找“fast”运营商吗?如建议的那样, Inc Dec 在函数和长度上最接近 + = - = ,但是在某些情况下,它们也更快。如果您已启用范围检查,那么它们会更快,然后调用 x:= x + 1;

这是打开范围检查的反汇编,其中所有变量都是 Inc(MyVar,x)

// Inc(MyVar, x);
  add bl, x

这里是x:= x + 1;

// x := x + 1;
  movzx eax,bl
  movzx edx, x
  add eax,edx
  cmp eax,$000000ff
  jbe success
  call @BoundErr
success:
  mov ebx,eax

即使没有范围检查失败,您也可以看到差异。

但是,如果您打开溢出检查,Inc仍然需要支付此费用。

答案 1 :(得分:6)

您可以使用Inc命令,如下所示:

Inc(MyVar, X);

答案 2 :(得分:5)

不,你没有。但你可以使用

procedure Inc(var X [ ; N: longint ] );
Inc(avar)
Inc(avar, 10)

将变量递增N或

procedure Dec(var X [ ; N: longint ] );
Dec(avar);
Dec(avar, 10);

将变量递减N.

答案 3 :(得分:2)

Inc(MyVar, X);

不会缩短,我担心。

答案 4 :(得分:1)

'Do and Assign'等+=-=等运算符不属于Delphi 规范语言 - 你需要再增加另一个,可能更长,方式。

答案 5 :(得分:1)

  

在delphi中,有没有办法缩短这种代码:

你想缩短什么? x = x + 1和x + = 1在支持它们的语言中生成相同的代码(对于标准类型)。由于Delphi没有运算符重载,因此x:= x + 1是整数或浮点运算。代码语法就是:语法。一个不比另一个“更快”。