【问题标题】:Difference between Generic Lambdas通用 Lambda 之间的区别
【发布时间】:2021-12-31 00:23:48
【问题描述】:

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

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

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

【问题讨论】:

标签: c++ templates lambda


【解决方案1】:

虽然两者在功能上是等价的,但是它们是C++14和C++20的特点,即泛型lambda和泛型lambda的模板语法,也就是说后者是在 C++20 中格式正确。

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

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

此外,它还可以让 lambda 以更自然的形式转发参数:

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

您可以通过原论文P0428获取更多详情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 2011-05-21
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多