两者之间的确切区别是什么:
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 没有捕获任何内容,它的行为就像一个普通函数。