开关和函数指针,哪个更快

  • 本文关键字:函数 指针 开关 c++
  • 更新时间 :
  • 英文 :


如果我将函数指针保存到一个数组,比如这个

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。现在我想知道,哪个更快?

这两个代码片段并不等价。除了不同的索引之外,第一个不执行范围检查。如果索引超出范围,则第二个不运行任何函数。

如果这些差异得到解决,我预计两者之间不会出现显著的性能差异。编译器可以做所有相同的技巧,甚至更多。它没有理由为那些不是";最好的方式";。

最新更新