[英]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)如果我们看到IL
与ILDASM
然后在组装线的第一个片段的数量会比第二个更。 因此,第一个代码段的代码大小更大。 装配的尺寸越小越好。
如果cond1
和cond2
不是简单的布尔值,而是具有副作用的属性或函数,则存在差异,因为在第一个版本中,将始终评估cond2
并因此发生副作用。
假设每个cond
真假cond
大致相等,并假设每个cond
占用一个STU(有效时间单位),则||
总体预期为1.5 STU,而不是2,这将花费1 STU,而一半时间是2 STU。
如果STU是十亿分之一秒,则可能无关紧要。
如果STU是一个世纪,它可能会做到。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.