繁体   English   中英

两个条件,或一个条件或

[英]Two if conditions or one if with OR

我有一个小疑问

我有以下代码

bool res= false;
if(cond1)
{
   res = true;
}

if(cond2)
{
   res = true;
}

如果我放置以下代码,则代替此

if(cond1 || cond2)
{
   res = true;
}

哪个代码段将更优化?

我相信这将是第二个,因为我避免了If条件。

好吧,我不知道是否合适,但是:在这种情况下,这并不重要

不要过多地进行微优化

但是要回答您的问题,请坚持使用易于理解的问题。

最快的解决方案是这样的:

bool res = cond1 || cond2;

这是微优化。 选择一个更具可读性的:

return cond1 || cond2;

性能提升确实不会引起注意,但是第二个比第一个更具可读性和逻辑性。

唯一的区别是在cond1为true的情况下-因此,不会测试第二个示例cond2。 如果cond1为false,则将在两种情况下都对cond2进行测试。

不幸的是,不是每个人都看到Or(|)和Condional Or(||)之间的区别。 如果在第二个片段中使用“或”,则没有区别(两个条件都被评估)。 使用“条件或”表示如果第一个条件(从左到右)为真,则甚至不评估下一个条件。

这是一个非常有用的功能。

第二个选项更加优化。 在第一个选项中,它将始终检查cond2。 您可以在option1中将if改为else来进行优化。

这里的性能差异不会很明显。但是肯定第二个更好。

1)可读性更好。

2)第二个片段比第一个更合乎逻辑。

3)如果我们看到ILILDASM然后在组装线的第一个片段的数量会比第二个更。 因此,第一个代码段的代码大小更大。 装配的尺寸越小越好。

如果cond1cond2不是简单的布尔值,而是具有副作用的属性或函数,则存在差异,因为在第一个版本中,将始终评估cond2并因此发生副作用。

假设每个cond真假cond大致相等,并假设每个cond占用一个STU(有效时间单位),则|| 总体预期为1.5 STU,而不是2,这将花费1 STU,而一半时间是2 STU。

如果STU是十亿分之一秒,则可能无关紧要。

如果STU是一个世纪,它可能会做到。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM