之间的确切区别是什么:
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
(live demo)。
用法:
两者都可以使用相同的语法调用(foo(1)
和 bar(1)
),因此没有区别。
如果 lambda 不捕获任何东西,它的行为就像一个普通函数。
关于c++ - 函数和非捕获 lambda 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57632866/