函数和非捕获 lambda 之间的区别

Difference between function and non-capturing lambda

本文关键字:之间 区别 lambda 函数      更新时间:2023-10-16

两者之间的确切区别是什么:

auto foo(int i) -> int {
return i + 1;
}
static constexpr auto bar = +[](int i) -> int {
return i + 1;
};

在链接、性能和使用情况方面?我很好奇 lambda 的行为是否与正常声明的函数完全相同。

链接:foo是一个函数,具有外部链接。bar是一个变量,其类型是int (*const)(int),并且具有内部链接。 我没有看到任何后果,这里应该作为一个重要的区别来提及。

性能:在发布版本中,两者都可以内联,因此没有区别。在调试版本中,bar速度较慢:编译器生成更多的组装代码和两个(而不是一个(call指令用于bar(现场演示(。

用法:两者都可以用相同的语法(foo(1)bar(1)(调用,所以没有区别。

如果 lambda 没有捕获任何内容,它的行为就像一个普通函数。