Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi IF语句中OR运算符的中断条件_Delphi_If Statement_Compiler Optimization_Boolean Operations - Fatal编程技术网

Delphi IF语句中OR运算符的中断条件

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 即

If语句和任何其他布尔比较都很聪明,当计算
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