我已经搜索了一下,发现了许多例子和讨论你将使用std::bind
而不是lambda的情况,但我遇到的一个问题是,是否有任何性能上的好处。其他。我将描述我的用例:
我有一个通用的A*
我已经实现了,我传递了后继,启发式距离和移动成本函数。
以下是我的启发式函数示例,可以将其传递给搜索(两种形式):
std::function<float(const Location*, const Location*)> hdist = std::bind(&TerrainMap::straightLineDist, this, std::placeholders::_1, std::placeholders::_2);
std::function<float(const Location*, const Location*)> hdist2 = [this](const Location* a, const Location* b){
return straightLineDist(a,b);
};
这些方法的表现有何不同?我意识到差异可能微乎其微,但我很好奇想知道。
答案 0 :(得分:2)
这些方法的表现有何不同?
也许,也许不是;正如评论者所建议的 - 要查看的个人资料,或查看您获得的汇编代码(例如使用GodBolt Compiler Explorer)。但是你提出了错误的问题,主要有两个原因:
bind()
结果。 std::function
变量调用任意函数(除非这可以通过编译器进行去虚拟化和内联) 和一个心灵原因:
std::bind()
)是可用的,有用的,不包含在std :: function中;这个包装器有自己的性能损失,所以你只能比较一种使用这些结构的方法。底线推荐:只需使用Lambdas。它们更清晰,更易于理解,编译成本更低,语法更灵活。所以不要担心,要开心:-)。在性能关键代码中,要么使用没有std::function
的Lambda,要么不使用任何两个。