5

If 语句和任何其他布尔比较足够聪明,可以在评估时在第一个 FALSE 值处停止,在评估时A and B and C and D在第一个 TRUE 值处停止A or B or C or D

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

4

1 回答 1

14

这称为“布尔短路评估”,是“惰性评估”的一种形式。

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

Complete evaluation     Lazy evaluation
{$B+}                   {$B-}
{$BOOLEVAL ON}          {$BOOLEVAL OFF} 

但请注意,这不仅是一种优化,因为此功能允许您编写如下代码

if (length(myarr) > 0) and (myarr[0] = MY_VAL) then

即使myarr[0]不存在,它也会起作用。这其实很常见。

于 2013-09-03T17:52:04.450 回答