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

标签 c++ function lambda linker

之间的确切区别是什么:

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/

相关文章:

haskell - 没有因使用 `print' 而产生的 (Show (Int -> Int)) 实例

JAVA 8 Stream 过滤器使用 Predicate 获取最新记录

c++ - 如何在没有智能指针的情况下防止双重删除?

sql - 重新审视 ORA-06576 : not a valid function or procedure name for simple function call via various database tools

javascript - 类型错误 : Cannot read property "values" from undefined.(第 9 行,文件 "Code")

Javascript 函数比普通操作更快

android - kotlin lambda 表达式作为可选参数

c++ - 段错误 : Struct Serialisation and MPI Data Transfer in C++

C++ 错误 LNK2019

c++ - 是否合理使用返回匿名结构的函数?