通用 Lambda 之间的区别

Difference between Generic Lambdas

我目前正在学习通用的 lambda 函数,我很好奇它们之间的区别:

[](auto x){}; []<typename T>(T x){};

他们都做同样的事情,但是一个比另一个快吗?拥有这两种语法有什么意义。

虽然两者在功能上是等价的,但它们是C++14和C++20的特性,即generic lambda和template syntax for generic lambdas,也就是说后者在 C++20 中 格式正确。

相对于auto可以接受any类型,后者可以让lambda接受特定的类型,例如:

[]<class T>(const std::vector<T>& x){};

此外,它还使lambda能够以更自然的形式转发参数:

[]<class... Args>(Args&&... args) {
  return f(std::forward<Args>(args)...);
};

您可以通过原始论文了解更多细节P0428