今天在阅读一些代码时,我偶然发现了这样的事情:
int v[5] = {1, 13, 17, 20, 16};
for_each(begin(v), end(v), [](int n){ cout << n << endl; });
我有点明白发生了什么。它使用 std::for_each 函数打印数组 v[] 的所有值。但是有什么关系[](int n){ cout << n << endl; }
呢?
您在这里看到的是在 C++ 中使用 lambda 函数(这是C++11的一个特性)。
什么是 lambda 函数?基本上,它是一个可以在源代码中内联编写的函数。通过这样做,您可以轻松地内联创建快速函数,而以前您需要编写一个单独的命名函数。
在你的情况下,这是发生了什么:
for_each(begin(v), end(v), [](int n){ cout << n << endl; });
^^
||
这是告诉编译器我们在这里创建的是一个 lambda 函数的标识符。
for_each(begin(v), end(v), [](int n){ cout << n << endl; });
^^^^^
|||||
这是参数列表,在本例中是来自您的数组的整数v[]
。
for_each(begin(v), end(v), [](int n){ cout << n << endl; });
^^^^^
|||||
从这里我们可以看到函数体。这就像如果您要创建一个常规函数,只是它与您的其余代码内联。
如前所述,lambda 函数是内联函数,因此您可能想知道返回类型在哪里。如果 lambda 不是很复杂,则它是可选的,因为编译器可以推断出什么是返回类型。在您的情况下,编译器知道您的函数不返回任何内容。例如,如果您希望它显式返回一个 int,您可以告诉编译器您希望函数返回什么,如下所示:
[] () -> int { return 2; };