我得到并切换这样的语句:
switch(x){
case a:
executeSth();
executeA();
break;
case b:
executeSth();
executeB();
break;
...
}
Run Code Online (Sandbox Code Playgroud)
所以executeSth(); 应该总是执行,除非在默认情况下,但在它之后调用一些特定于案例的代码(executeA();或executeB()等).(所以简单地将它放在开关前面是行不通的).
有没有一种有效的方法来减少"executeSth();"的数量 在不牺牲性能的情况下?
我只能想象将它分成两个开关(一个执行executeSth()和一个执行特定代码)但这会牺牲性能.也许你有更好的想法?
我基本上习惯于c/c ++或php的代码.我的目标是最小化代码大小,并在c/c ++的情况下最小化生成的可执行文件的大小.
编辑:是的,功能的顺序很重要.Edit2:我没有php或c ++之间的选择,我需要它尽可能好.
switch是一个选项......这使用了两个开关,但第二个没有在这种default情况下触发,因此比两个内嵌开关具有稍好的性能配置.
switch($x) {
case a: case b: case c:
executeSth();
switch($x) {
case a:
executeA();
break;
case b:
executeB();
break;
case c:
executeC();
break;
}
break;
default:
...
}
Run Code Online (Sandbox Code Playgroud)
这是一个可以使用的PHP选项,尽管很多人不喜欢变量函数.如果您想完全删除嵌套和重复,这可能是最佳选择.
switch($x) {
case a:
$function = "executeA";
break;
case b:
$function = "executeB";
break;
case c:
$function = "executeC";
break;
default:
...
}
if(isset($function)) {
executeSth();
$function();
}
Run Code Online (Sandbox Code Playgroud)
我还做了一个小住在这里试验台,如果有人想测试他们的PHP解决方案发布之前的工作(case 10应executeSth()和executeA(),case 20宜executeSth()和executeB(),default宜executeDefault()).
当我写这篇文章的时候,我有一个完全的大脑放屁,谢天谢地提醒我,我们可以使用一个简单的函数指针来做到这一点.
// Declare function pointer
int (*functionCall)() = NULL;
// In switch statement, assign something to it
functionCall = &execute;
// After the switch statement, call it
int result = (*functionCall)();
Run Code Online (Sandbox Code Playgroud)
注意:我出去所以没有检查这些语法.我使用的语法是C语法,可能需要一些小的更改才能在C++中工作.
| 归档时间: |
|
| 查看次数: |
1248 次 |
| 最近记录: |