在IF语句中对OR和AND运算符的中断条件

EPr*_*und 4 delphi if-statement compiler-optimization boolean-operations

If语句和任何其他布尔比较是智能的,在评估时应首先停止FALSE值,A and B and C and D并在评估时首先停止TRUE值A or B or C or D.

这种行为的名称是什么?
这是编译器优化吗?如果是这样,有一种方法可以用一些编译器指令禁用它吗?

And*_*and 13

这称为"布尔短路评估",一种"懒惰评估".

您可以使用编译器指令告诉编译器使用或不使用此功能:

Complete evaluation     Lazy evaluation
{$B+}                   {$B-}
{$BOOLEVAL ON}          {$BOOLEVAL OFF} 
Run Code Online (Sandbox Code Playgroud)

但请注意,这不仅仅是一种优化,因为这个功能允许你编写代码

if (length(myarr) > 0) and (myarr[0] = MY_VAL) then
Run Code Online (Sandbox Code Playgroud)

即使myarr[0]不存在也会有效.实际上,这很常见.

  • 您也可以通过IDE中的"项目选项"进行设置.如果你真的想要用脚射击自己,你可以为每个构建配置设置不同的方式. (4认同)