这行代码如何打印数组?

3

今天我在阅读一些代码时,偶然发现了这样的内容:

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; }是什么意思?

6
那是一个 lambda - 查一下就行。 - Luchian Grigore
我想我以前从未听说过这些东西。感谢你的回答,我认为我理解了。 - user2018675
1个回答

12
这里展示的是在 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; };

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接