我有这样的代码
typedef void(_stdcall * MyProcessor)(int, int);
void FunctionProcess (MyProcessor process){
MyProcessor myCallback;
myCallback = (process != NULL)? process:"<functionThatDoesNothing>";
...
}
如果参数中没有任何回调函数,我想给myCallback分配一些函数,它什么也不做(或者什么都不做),因为之后,我在循环中调用这个函数(和由于管道冲洗,我想避免循环中的'if'。我试过no-op lambda没有成功(不兼容)。
有这样的功能吗?还有其他可能性吗?谢谢。
答案 0 :(得分:5)
你的逻辑是疯了!如果if
被正确预测,它几乎是免费的。如果间接跳跃被错误预测,那将是可怕的。 if
比间接跳转更容易预测(只有两种可能性,推测执行是可能的,大多数CPU上有更多的预测槽)。因此,几乎没有可能的情况,这是有道理的。
答案 1 :(得分:1)
使用您想要的签名编写一个空函数。
void __stdcall pass(int a, int b)
{
}
答案 2 :(得分:0)
typedef void(_stdcall * MyProcessor)(int,int);
void _stdcall noop(int,int) {}
void functionProcess (MyProcessor process){
MyProcessor const myCallback = process?process:noop;
myCallback(7,4);
}