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

aze*_*era 3 delphi operators

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

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

MyVar := MyVar + X;
Run Code Online (Sandbox Code Playgroud)

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

谢谢你的帮助

Jim*_*eth 19

您在寻找"快速"短期运营商吗? 如所建议的那样,IncDec在函数和长度上最接近+ =- =,但在某些情况下它们也更快.如果你打开了范围检查,那么它们比调用x:= x + 1更快;

这是打开范围检查的反汇编,其中所有变量都是Inc(MyVar,x)的字节($ ff的最大值)

// Inc(MyVar, x);
  add bl, x
Run Code Online (Sandbox Code Playgroud)

这里是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
Run Code Online (Sandbox Code Playgroud)

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

但是,如果启用" 溢出"检查,则Inc仍然会受到此开销的影响.


and*_*dyp 6

您可以像这样使用Inc命令:

Inc(MyVar, X);
Run Code Online (Sandbox Code Playgroud)


eKe*_*ek0 5

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

procedure Inc(var X [ ; N: longint ] );
Inc(avar)
Inc(avar, 10)
Run Code Online (Sandbox Code Playgroud)

将变量增加N,或

procedure Dec(var X [ ; N: longint ] );
Dec(avar);
Dec(avar, 10);
Run Code Online (Sandbox Code Playgroud)

通过N减少变量.