其实来至于segmentfalut上回答的一个问题
基于不知道这个网站能否活下去,暂时把答案搬家到这里。
在大多数情况下,switch的性能不会比if else低。
在某些特定情况下,编译器能对switch进行优化。比如说:
1. 不按顺序比较,而是构造一个二分查找树(binary decision tree), 这样子比较的平均次数就会下降。
2. 可以做个跳转表(jump table)这样子就不许要任何比较了。比如如下的代码。
int
main(
int
argc,
char
*
argv[])
{
int j = 0 ;
int n;
cin >> n;
switch (n)
{
case 1 : j = 1 ; break ;
case 2 : j = 2 ; break ;
case 3 : j = 3 ; break ;
case 4 : j = 5 ; break ;
default :j = 6 ;
}
cout << j << endl;
return 0 ;
}
{
int j = 0 ;
int n;
cin >> n;
switch (n)
{
case 1 : j = 1 ; break ;
case 2 : j = 2 ; break ;
case 3 : j = 3 ; break ;
case 4 : j = 5 ; break ;
default :j = 6 ;
}
cout << j << endl;
return 0 ;
}
在VS2008下生成的代码就使用了jump table