函数调用后的另一组括号 [C++]

Another set of parentheses after a function call [C++]

我在一本书中遇到过这个例子(以更通用的形式重写),但是,我很好奇的问题没有得到解释。 有效,我已经测试过了。

问.:

#include <iostream>

template <typename FUNCTION>
auto compose(FUNCTION&& f)
{
    return [=](auto x){ return f(x);}; // where does the x come from?
}

int main() {
    std:: cout << compose([](int const n) { return n*2; })(4); // How is 4 captured? What is (4) here?
}

这只是一些有趣的代码来说明我猜想的一点。

[](int const n) { return n*2; }
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

这段代码定义了一个匿名函数 (lambda)。它由编译器转换为类似于此的结构:

struct {
  operator()(int const n) { return n*2; }
};

现在 compose() 接受这个结构并将其打包到另一个具有构造函数的类似结构中,并将上面的结构存储在一个成员变量中。

你最终调用了一个匿名结构 operator()(4)