Delphi IF语句中OR运算符的中断条件
If语句和任何其他布尔比较都很聪明,当计算Delphi IF语句中OR运算符的中断条件,delphi,if-statement,compiler-optimization,boolean-operations,Delphi,If Statement,Compiler Optimization,Boolean Operations,If语句和任何其他布尔比较都很聪明,当计算A和B以及C和D时,它会在第一个假值处停止,当计算A或B或C或D时,它会在第一个真值处停止 这种行为的名称是什么 这是编译器优化吗?如果是这样,有没有一种方法可以通过一些编译器指令来禁用它这称为“布尔短路评估”,是“惰性评估”的一种形式 您可以使用以下命令告诉编译器使用或不使用此功能: 但请注意,这不仅仅是一种优化,因为此功能允许您编写类似 if (length(myarr) > 0) and (myarr[0] = MY_VAL) then 即
A和B以及C和D时,它会在第一个假值处停止,当计算A或B或C或D时,它会在第一个真值处停止
这种行为的名称是什么
这是编译器优化吗?如果是这样,有没有一种方法可以通过一些编译器指令来禁用它
这称为“布尔短路评估”,是“惰性评估”的一种形式
您可以使用以下命令告诉编译器使用或不使用此功能:
但请注意,这不仅仅是一种优化,因为此功能允许您编写类似
if (length(myarr) > 0) and (myarr[0] = MY_VAL) then
即使myarr[0]
不存在,它也会工作。实际上,这很常见。为什么要禁用此功能?这是if
语句的正常功能。@Jerrydoge有时短路求值会使您在逻辑方面遇到麻烦,如果您不完全了解它,则可能会出现意外情况,因此提供了禁用它的选项。如果你没有(或不能)计划好,那么不评估条件不会引起问题,它可能会反过来咬你。@Jerrydoge他在If条件中使用的函数可能还有其他他希望生效的功能?(这将是一个糟糕的设计,尽管如果他有一些第三方代码,这是很难避免的。)您也可以通过IDE中的项目选项进行设置。如果你真的想自杀,你可以为每个构建配置设置不同的设置。非常感谢!!为了我们俩you@MatheusFreitas你能分享一下你为什么需要这个吗?您在if条件中使用的功能可能还有其他您希望生效的功能?请注意,使用带有副作用和返回值的函数是一种糟糕的编码实践。(如果返回的值不作为错误报告。)如果是,您不能将函数结果保存在布尔缓冲区中,并使用If头中的缓冲区吗?@MatheusFreitas在这种情况下,很抱歉给您带来不便。但还是。。。这是可以做到的,但这样做是不好的做法D
if (length(myarr) > 0) and (myarr[0] = MY_VAL) then