绑定(bind)函数(使用 Boost Bind)时是否有任何性能影响(正面或负面)?
最佳答案
也许,也许不是。这取决于。
std::bind
(或 boost::bind
)的结果是所谓的“绑定(bind)表达式”,它具有由执行。此类型是一个Callable,并且它可转换为std::function
(或boost::function
).
在内部,函数
(可能)使用类型删除来处理各种复杂的、有状态的“可调用对象”。在某些(但不一定是所有)情况下,这需要动态分配和虚拟调度。 bind
和 function
都是有状态的,因为它们存储绑定(bind)参数。
结果是您应该尽可能避免将绑定(bind)表达式转换为 function
对象。 bind 表达式本身可能更便宜,您不应该害怕使用 bind
(例如,将成员函数指针绑定(bind)到实例和参数时)。自由使用 bind
,但仅当您确实需要管理可调用实体的异构集合时才转换为 function
。
这里有两个典型的例子:
不好;避免这种情况:
std::function<int(bool, char)> f = std::bind(&Foo::bar, x, 12);
void do_something(std::function<int()> func, int & acc)
{
acc += func();
}
更好;更喜欢这个:
auto f = std::bind(&Foo::bar, x, 12); // unknowable type, but perfectly fine
template <typename F>
void do_something(F && func, int & acc) // can deduce unknowable types
{
acc += func();
}
关于c++ - C++ boost 绑定(bind)性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12446596/