具体来说,如果我有一系列if
..else if
语句,并且我事先以某种方式知道每个语句将计算为true
的相对概率,则按概率顺序对它们进行排序在执行时间上有多大差异?例如,我应该更喜欢这个:
if (highly_likely)
//do something
else if (somewhat_likely)
//do something
else if (unlikely)
//do something
对此?:
if (unlikely)
//do something
else if (somewhat_likely)
//do something
else if (highly_likely)
//do something
似乎很明显,排序的版本会更快,但是为了可读性或副作用的存在,我们可能希望对它们进行非最优排序。在实际运行代码之前,也很难判断CPU在分支预测方面的表现如何。
所以,在这个实验过程中,我最终回答了我自己对一个具体案例的问题,但我也想听听其他的意见/见解。
要点:此问题假设if
语句可以任意重新排序,而不会对程序的行为产生任何其他影响。在我的回答中,这三个条件测试是互斥的,不会产生副作用。当然,如果必须按照一定的顺序对语句求值才能实现某种期望的行为,那么效率问题就没有实际意义了。