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]不存在也会有效.实际上,这很常见.
| 归档时间: |
|
| 查看次数: |
333 次 |
| 最近记录: |