c++ - 通用 Lambda 之间的差异

标签 c++ templates lambda

我目前正在学习通用 lambda 函数,并且我很好奇它们之间的差异:

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

它们都做同样的事情,但一个比另一个更快?使用这两种语法有什么意义。

最佳答案

虽然两者在功能上是等价的,但它们都是C++14和C++20的特性,即泛型lambda和泛型lambda的模板语法,这意味着后者是>仅在 C++20 中格式良好。

与可以接受任何类型的auto相比,后者可以使lambda接受特定类型,例如:

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

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

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

您可以通过原论文P0428获得更多详细信息.

关于c++ - 通用 Lambda 之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70048200/

相关文章:

c++ - 在命名空间 'names'::std::vs std::

c++ - 在 scons 中使用 codelite

c - ansi C 中的模板?

具有多个通用参数的 java lambda 表达式未编译

java - 从堆转储中的错误名称中查找 Java lambda

c#-4.0 - 使用 >、>=、<、<= 运算符的 Entity Framework 字符串数据类型 : Lambda expression

c++ - 链接 C++ 失败 [未定义的引用 boost::filesystem3 ...]

c++ - 为什么我的纹理在我的 OpenGL 应用程序中渲染不正确?

C++ 泛型链表

javascript - ajax删除后刷新模板