今天我在阅读一些代码时,偶然发现了这样的内容:
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; }
是什么意思?今天我在阅读一些代码时,偶然发现了这样的内容:
int v[5] = {1, 13, 17, 20, 16};
for_each(begin(v), end(v), [](int n){ cout << n << endl; });
[](int n){ cout << n << endl; }
是什么意思?for_each(begin(v), end(v), [](int n){ cout << n << endl; });
^^
||
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; };