作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
目标是根据复选框是打开还是关闭来更改事件循环中的行为。我能想到的最简单的方法就是在每次循环运行时测试复选框状态。
// if-statement
void action() { /* ... */ }
void someLoop() {
if (checkboxTrue) {
action();
}
// ... other stuff
}
如果使用函数指针,代码是否会更高效、更简洁或在其他方面更好?像这样:
// function pointer
void action() { /* ... */ }
void empty() {}
void (*actionPtr)();
void checkboxChanged(int val) {
if (val == 1)
actionPtr = &realAction;
else
actionPtr = ∅
}
void someLoop() {
(*actionPtr)();
// ... other stuff
}
最佳答案
一个间接函数调用比一个 if 条件调用更昂贵。
几个 if 条件比间接函数调用更昂贵。
此时担心速度是没有意义的:
您正在等待用户的延迟,并且您正在处理他可以查看的内容(即不会有大量的复选框)。在这样的详细级别上优化每秒执行不到一百万次的代码绝对没有意义。
因此,我的建议是:在编写用户界面时,不要再担心 if
或函数调用的成本。只考虑耗时算法中的此类内容。
但是,如果您发现您确实在内部循环中使用了复杂的 if
/else
阶梯和/或 switch
语句,那么您可以通过用间接函数调用替换它们来优化。
编辑:
你说你每秒有 600 次检查。假设您只有一个 if
情况要处理(if
更快的情况),您通过不使用函数指针间接寻址可以每秒“节省”大约 6 微秒,即运行时间的 0.0006%。绝对不值得付出努力...
关于c - If 语句与函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20906060/
我是一名优秀的程序员,十分优秀!