lambda“调用运算符”和“带括号的 lambda”

met*_*ter 2 c++ syntax lambda

我读过一个答案并偶然发现了下面的示例代码,这是 Elliott 从其他 SO 问题中得到的答案

我在尝试理解两件事(并了解如何调用此语法)时遇到问题:

#include <iostream>

template <typename ... T>
void Foo (T && ... multi_inputs)
{
    int i = 0;
    
    ([&] (auto & input)
    {
        // Do things in your "loop" lambda
    
        ++i;
        std::cout << "input " << i << " = " << input << std::endl;

    } (multi_inputs), ...);
}


int main()
{
    Foo(2, 3, 4u, (int64_t) 9, 'a', 2.3);
    
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

两个问题,每个问题都有子问题:

  1. lambda 的末尾是表达式(multi_inputs), ...

这相当于以下简化语法:

auto y = [&]() { }();
Run Code Online (Sandbox Code Playgroud)

我这里不明白两件事,final()叫什么,它有什么作用?我认为这是某种函数调用运算符,但如果脱离上下文,它看起来是多余的。

  1. 条目 lambda 本身包含在括号中()

这相当于以下简化语法:

(auto y = [&]() { }());
Run Code Online (Sandbox Code Playgroud)

在这里我想了解同样的问题,这个语法被称为什么以及它在这个上下文中和之外的作用是什么?我认为这也是某种“括号运算符”,但对此一无所知。

知道这些括号的作用是一回事,但知道这个语法的名称对于理解 ex 也很重要。了解在 cppreference 上查找什么内容。

Jar*_*d42 5