如果我将函数指针保存到一个数组,比如这个
typedef int (*p)();
p arr[] = {a, b, c, d};
并使用索引运行它:
arr[index]();
或者我用开关代替它:
switch(index){
case 1:{
a();
break;
}
case 2:{
b();
break;
}
case 3:{
c();
break;
}
case 4:{
d();
break;
}
}
第一个代码可以调用O(1(中的func,但第二个代码可以使用内联func。现在我想知道,哪个更快?
这两个代码片段并不等价。除了不同的索引之外,第一个不执行范围检查。如果索引超出范围,则第二个不运行任何函数。
如果这些差异得到解决,我预计两者之间不会出现显著的性能差异。编译器可以做所有相同的技巧,甚至更多。它没有理由为那些不是";最好的方式";。