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