If 语句和任何其他布尔比较足够聪明,可以在评估时在第一个 FALSE 值处停止,在评估时A and B and C and D
在第一个 TRUE 值处停止A or B or C or D
。
这种行为的名称是什么?
这是编译器优化吗?如果是这样,有没有办法用一些编译器指令来禁用它?
If 语句和任何其他布尔比较足够聪明,可以在评估时在第一个 FALSE 值处停止,在评估时A and B and C and D
在第一个 TRUE 值处停止A or B or C or D
。
这种行为的名称是什么?
这是编译器优化吗?如果是这样,有没有办法用一些编译器指令来禁用它?
这称为“布尔短路评估”,是“惰性评估”的一种形式。
您可以使用编译器指令告诉编译器使用或不使用此功能:
Complete evaluation Lazy evaluation
{$B+} {$B-}
{$BOOLEVAL ON} {$BOOLEVAL OFF}
但请注意,这不仅是一种优化,因为此功能允许您编写如下代码
if (length(myarr) > 0) and (myarr[0] = MY_VAL) then
即使myarr[0]
不存在,它也会起作用。这其实很常见。