我前段时间在review一个事件系统的代码,里面大量使用了std::functionvoid(const Event)做回调注册,跑benchmark的时候发现一个让我很不舒服的数字——同样是调用一个简单的累加函数,std::function版本比直接用模板参数传lambda慢了将近8倍,而更让我意外的是,它甚至比虚函数版本还慢了大约30%,这意味着你用std::function包装一个回调所付出的运行时代价,实际上比你在基类里声明一个virtual void onEvent()还要高——而大多数C++程序员的直觉恰恰是反过来的,他们以为std::function只是"一个稍微灵活一点的函数指针",开销微乎其微。// 三种回调方式的benchmark对比(GCC 14.1, -O2, x86-64)// 回调内容:sum += value(一个简单累加)// 调用次数:1亿次// 模板参数: ~0.3ns/call (编译器直接内联)// 虚函数调用:~2.1ns/call (vtable间接调用)// std: