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

ラムダ式を導入します。角括弧の内容は、ラムダ内にキャプチャされるものを示しています。そこにのみある& ということは、ラムダの内側で言及され、そのスコープの外側で見つけることができるすべてのものが参照によってキャプチャされることを意味します。

例:

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

これはC++11の機能であり、ラムダキャプチャ句と呼ばれます。この場合、[&]はラムダ関数が参照によって関数へのすべての引数を利用できるようにしparallel_matrix_multiply()ます。

詳細については、ラムダ関数を参照してください。

于 2012-09-04T10:57:07.133 に答える
10

標準の特徴ですC++11ラムダ

于 2012-09-04T10:56:44.367 に答える
8

これは、ラムダ式に使用されるキャプチャ句です。ラムダ式は、それを囲むスコープのすべての変数にアクセスできます(つまり、ラムダが関数内にある場合は、その関数内のすべての変数にアクセスできます)。[&]ラムダが参照によってすべての変数を取得することを意味します。それらはで取得することもできます。その場合は、を使用します[=]。次のように、特定の方法で取得する必要のある具体的な変数を指定することもできます。

[&X, =]

ラムダはX参照によって変数を取り、他のすべては値によって取るということを意味します。

于 2012-09-04T11:03:13.850 に答える
6

[&]は、ラムダ式内の周囲のコードから変数にアクセスでき、参照によってアクセスできることを意味します(つまり、変数を変更できます)。サンプルコードでは、パラメータとして渡されていない場合でも、ラムダ式で使用されていることがわかりますm1, m2, resultsize

于 2012-09-04T11:05:11.593 に答える
4

これはLambda関数、C++11機能です

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

コールバックまたはファンクターのように機能します。したがって、parallel_forに渡すために別の場所に別の関数を記述する必要はありません。

于 2012-09-04T10:58:36.867 に答える