8

我有一个没有成员变量的仿函数。我想知道根据需要动态创建此函子或将其缓存为成员变量是否更有效。我不确定关于空基类优化和缓存位置的问题。

struct Foo
{
int operator()(const MyData& data) const { ... }
};
4

2 回答 2

9

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

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

于 2013-10-18T14:02:42.520 回答
0

优化的一般规则是:代码首先使其工作,仅在证明有必要时才优化(换句话说,您已经分析了代码并发现了需要解决的瓶颈以大大提高性能)。

于 2013-10-18T14:06:55.300 回答