gpt4 book ai didi

c++ - std::bind 与 lambda 的效率

转载 作者:行者123 更新时间:2023-11-30 03:25:02 26 4
gpt4 key购买 nike

我搜索了一下,发现了很多使用 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);
};

这些方法的性能有什么不同吗?我意识到差异可能可以忽略不计,但我很好奇想知道。

最佳答案

Is there any difference in the performance of these approaches?

也许,也许不是;正如评论者所建议的那样-要检查的配置文件,或查看您获得的汇编代码(例如使用 GodBolt Compiler Explorer )。但是您问错了问题,主要原因有两个:

  1. 您可能不应该在性能关键的代码部分周围传递 lambda 或 bind() 结果。
  2. 您应该绝对避免在代码的性能关键区域通过函数指针或 std::function 变量调用任意函数(除非这可以被去虚拟化并由编译器内联)。

还有一个原因:

  1. Lambdas(和 std::bind()'s)是可用的,而且有用,没有被包装在 std::function 中;此包装器有其自身的性能损失,因此您只能比较使用这些构造的一种方式。

底线建议:只需使用 Lambdas。它们更简洁、更容易理解、编译成本更低,而且在语法上更灵活。所以不要担心,要开心 :-) 。在性能关键代码中,要么使用不带 std::function 的 Lambda,要么不使用两者中的任何一个。

关于c++ - std::bind 与 lambda 的效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49246242/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com