两者之间的确切区别是什么
auto foo(int i) -> int {
return i + 1;
}
static constexpr auto bar = +[](int i) -> int {
return i + 1;
};
在链接,性能和用法方面?我很好奇lambda是否会表现得完全像通常声明的函数一样。
答案 0 :(得分:2)
链接:
foo
是一项功能,并具有外部链接。
bar
是一个变量,其类型为int (*const)(int)
,并且具有内部链接。
我看不到有什么后果,在这里应该说是一个重要的区别。
性能:
在发布版本中,两者都可以内联,因此没有区别。在调试版本中,bar
的运行速度较慢:编译器会生成更多的汇编代码,并为call
(live demo)生成两条(而不是一条)bar
指令。
用法:
两者可以使用相同的语法(foo(1)
和bar(1)
)进行调用,因此没有区别。
如果lambda不能捕获任何内容,则其行为类似于普通函数。