Mar*_*ner 11 delphi logical-operators
我想知道以下代码是否可能因访问冲突而失败或是否安全.具有AND运算符的语句的第一个成员是否始终作为第一个检查,或者可能(通过某些编译器优化或其他东西)检查第二个作为第一个?
var
Item: TSomething;
procedure DoSomething;
begin
if Assigned(Item) and (Item.SomeProperty) then
DoSomethingElse;
end;
Run Code Online (Sandbox Code Playgroud)
上面的代码绝对安全吗?
谢谢!
ain*_*ain 12
在布尔短路评估激活的情况下,代码是安全的:
在{$ B-}状态下,编译器生成用于短路布尔表达式求值的代码,这意味着一旦整个表达式的结果从左到右的评估顺序变得明显,评估就会停止.
有点令人困惑,因为必须关闭B(或BOOLEVAL使用长名称)指令才能将短路评估切换为ON ...
另请参见运算符优先级.
| 归档时间: |
|
| 查看次数: |
328 次 |
| 最近记录: |