目标是根据复选框是否打开或关闭来更改事件循环中的行为。我能想到的最简单的方法就是每次运行循环时测试复选框状态。
// 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
内部循环中的语句,您可以通过用间接函数调用替换它们来优化。
Edit:
你说你每秒有 600 个检查。假设你只有一个if
要处理的情况(情况if
更快),如果不使用函数指针间接寻址,每秒可以“节省”大约 6 微秒,即运行时间的 0.0006%。绝对不值得付出努力...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)