功能和非捕获lambda之间的区别

时间:2019-08-23 20:50:25

标签: c++ function lambda linker

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

auto foo(int i) -> int {
  return i + 1;
}

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

在链接,性能和用法方面?我很好奇lambda是否会表现得完全像通常声明的函数一样。

1 个答案:

答案 0 :(得分:2)

链接: foo是一项功能,并具有外部链接。 bar是一个变量,其类型为int (*const)(int),并且具有内部链接。 我看不到有什么后果,在这里应该说是一个重要的区别。

性能: 在发布版本中,两者都可以内联,因此没有区别。在调试版本中,bar的运行速度较慢:编译器会生成更多的汇编代码,并为calllive demo)生成两条(而不是一条)bar指令。

用法: 两者可以使用相同的语法(foo(1)bar(1))进行调用,因此没有区别。

如果lambda不能捕获任何内容,则其行为类似于普通函数。