制作没有成员类成员对象或堆栈对象的仿函数会更有效吗?

Nat*_*mal 8 c++ performance

我有一个没有成员变量的仿函数.我想知道根据需要动态创建这个仿函数是否更有效,或者将其作为成员变量缓存.关于空基类优化和缓存局部性存在一些我不确定的问题.

struct Foo
{
int operator()(const MyData& data) const { ... }
};
Run Code Online (Sandbox Code Playgroud)

Dav*_*eas 9

对于空对象,只需在堆栈中创建它.将仿函数作为成员添加到您的类型将使您的所有对象更大.将其添加为基础(以利用空基础优化)将产生一种奇怪的设计,其中您的类型operator()(const MyData&)无缘无故地实现.即使您将其设为私有,运营商也会在那里.

由于类型没有成员,因此没有缓存局部性问题,因为没有要访问的数据.无状态函子的主要用途是允许编译器内联对函数的调用(与具有相同名称的自由函数相比)