比较两种:我应该在`else if`中删除不必要的`else`吗?
if (strstr(a, "earth")) // A1
return x;
if (strstr(a, "ear")) // A2
return y;
和
if (strstr(a, "earth")) // B1
return x;
else if (strstr(a, "ear")) // B2
return y;
就个人而言,我觉得else
是多余的,防止分支预测的CPU。
在第一个中,当执行A1时,可以对A2进行预解码。在第二种情况下,直到B1被评估为假时,它才会解释B2。
我发现了很多(也许大多数?)源使用后者的形式。 尽管后一种形式看起来更好理解,因为它不是很明显,只有在没有else子句的情况下a =~ /ear(?!th)/
才会调用return y
。
会编译器确实产生第二个片段?我会怀疑它。 – asveikau 2011-01-25 09:12:29
你为什么从你的代码中删除回报?这是完全改变的问题? – UmmaGumma 2011-01-25 10:04:41
当已经有答案发布到以前的版本时,进行编辑可以大大改变问题的含义,这是非常令人困惑的。即,它使这些答案不正确。 – 2011-01-25 10:09:31