17

你好,我在 Windows 文档中找到了这段代码

但我不明白是什么意思

[&]

请你告诉我它应该做什么?

这不是 C++ 标准吗?

这是代码:

void parallel_matrix_multiply(double** m1, double** m2, double** result, size_t size)
{
   parallel_for (size_t(0), size, [&](size_t i)
   {
      for (size_t j = 0; j < size; j++)
      {
         double temp = 0;
         for (int k = 0; k < size; k++)
         {
            temp += m1[i][k] * m2[k][j];
         }
         result[i][j] = temp;
      }
   });
}
4

6 回答 6

25

它引入了一个 lambda 表达式。方括号的内容表示要在 lambda 中捕获的内容。里面只有 a& 意味着在 lambda 中提到的并且可以在其范围之外找到的所有内容都通过引用捕获。

例子:

int a = 0;
auto l = [&]() { 
  ++a; // a refers to the a outside of this scope through a reference
}
l(); // execute the lambda
于 2012-09-04T11:01:38.530 回答
22

It is a C++11 feature and is called the lambda capture clause. In this case, the [&] makes available to the lambda function all of the arguments to the parallel_matrix_multiply() function by reference.

See lambda functions for more information.

于 2012-09-04T10:57:07.133 回答
10

It is feature of C++11 standard. lambda

于 2012-09-04T10:56:44.367 回答
8

这是用于 lambda 表达式的捕获子句。lambda 表达式可以访问其封闭范围的所有变量(即,如果 lambda 在函数内,它可以访问该函数内的所有变量)。这[&]意味着 lambda 将通过引用获取所有变量。它们也可以按值取值,在这种情况下你会使用[=]. 您还可以指定需要以特定方式获取的具体变量,例如以下代码:

[&X, =]

意味着 lambda 将X通过引用获取变量,并通过值获取所有其他变量。

于 2012-09-04T11:03:13.850 回答
6

[&] 表示您可以从 lambda 表达式中的周围代码访问变量,并且可以通过引用访问(即您可以修改它们)。在示例代码中,您可以看到m1, m2, resultsize在 lambda experssion 中使用,即使它们没有作为参数传递。

于 2012-09-04T11:05:11.593 回答
4

这是一个 Lambda 函数,C++ 11 特性

[&](size_t i){...}

将充当回调或仿函数。所以你不需要在其他地方写另一个函数来传递给parallel_for。

于 2012-09-04T10:58:36.867 回答