我读过一个答案并偶然发现了下面的示例代码,这是 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;
}
两个问题,每个问题都有子问题:
(multi_inputs), ...这相当于以下简化语法:
auto y = [&]() { }();
我这里不明白两件事,final()叫什么,它有什么作用?我认为这是某种函数调用运算符,但如果脱离上下文,它看起来是多余的。
()这相当于以下简化语法:
(auto y = [&]() { }());
在这里我想了解同样的问题,这个语法被称为什么以及它在这个上下文中和之外的作用是什么?我认为这也是某种“括号运算符”,但对此一无所知。
知道这些括号的作用是一回事,但知道这个语法的名称对于理解 ex 也很重要。了解在 cppreference 上查找什么内容。
f这里是一个 lambda
auto f = []() { return 42; };
int i = f(); // i = 42
而添加()后立即调用 lambda:
int i = []() { return 42; }(); // lambda called immediately
                               // i = 42;
(f<Ts>(), ...)或(f(args), ...)是折叠表达式(带有逗号运算符)以扩展可变参数模板。
它们相当于
(f<T0>(), f<T1>(), .., f<Tn>())或者(f(arg0), f(arg1), .., f(argN))。
| 归档时间: | 
 | 
| 查看次数: | 615 次 | 
| 最近记录: |