我感兴趣的是,如果我使用C或C++编译器的观点有什么不同:
if (value == a) {
...
}
else if (value == b) {
...
}
else if (value == c) {
...
}
Run Code Online (Sandbox Code Playgroud)
与
switch (value) {
case a:
...
break;
case b:
...
break;
case c:
...
break;
}
Run Code Online (Sandbox Code Playgroud)
我觉得没有区别,只有句法.有谁知道更多吗?
谢谢,Boda Cydo.
是的,存在差异.级联ifs保证按顺序评估条件.该开关仅保证对用作开关参数的任何内容进行单一评估.根据编译器的不同,无论选择的分支如何,交换机通常都会花费(几乎)恒定的时间,而if级联几乎可以保证第一条腿最快,第二条腿速度最快,依此类推,直到最后一条最慢.
存在差异 - 对于交换机,编译器可以优化交换机以使用查找表.如果有许多值彼此足够接近,则这是可能的.例如,这个开关:
switch ( integer ) {
case 10:
xxx
break;
case 12:
yyy
break;
case 13
zzz
break;
}
Run Code Online (Sandbox Code Playgroud)
可能成为(伪代码):
address = lookup[ integer - 10 ]; // which is prefilled with { case_10, err, err, case_12, case 13 }
goto address;
case_10: xxx; goto err;
case_12: yyy; goto err;
case_13: zzz;
err: //do nothing
Run Code Online (Sandbox Code Playgroud)