这条线如何打印阵列?

时间:2013-09-08 20:58:49

标签: c++ c++11 lambda

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

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; }的交易是什么?

1 个答案:

答案 0 :(得分:12)

您在这里看到的是使用lambda functions in C++(这是 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; };