这条线如何打印数组

How is this line printing the array?

本文关键字:打印 数组 何打印      更新时间:2023-10-16

当我今天阅读一些代码时,我偶然发现了这样的东西:

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; }有什么关系呢?

您在这里看到的是 lambda 函数在 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; };