[&](类型和变量)声明中的[&]是什么意思?

时间:2015-04-27 15:16:22

标签: c++

void listVsVectorSort(size_t nbr_of_randoms)
{
  std::uniform_int_distribution<int> distribution(0, nbr_of_randoms);
  std::mt19937 engine((unsigned int)time(0)); // Mersenne twister MT19937
  auto generator = std::bind(distribution, engine);
  NumbersInVector  vector(nbr_of_randoms);
  NumbersInList list;

  std::for_each(vector.begin(), vector.end(), [&](Number& n) 
                                              { n = generator(); list.push_back(n); }    );

  TimeValue list_time;
  {  // list measure sort
    g2::StopWatch watch;
    list.sort();
    list_time = watch.elapsedUs().count();
  }

    TimeValue vector_time;    
  {  // vector measure sort
    g2::StopWatch watch;
    std::sort(vector.begin(), vector.end());
    vector_time = watch.elapsedUs().count();
  }

  std::cout <<  nbr_of_randoms << "\t\t, " << list_time << "\t\t, " << vector_time << std::endl;
}

我在Code Project看到了上面的代码。在该行:

std::for_each(vector.begin(), vector.end(), [&](Number& n) 
                                                  { n = generator(); list.push_back(n); }    );

[&amp;](数字&amp; n)是什么意思,我更具体地询问[&amp;]的含义。

3 个答案:

答案 0 :(得分:2)

这意味着lambda范围之外的所有内容都将通过引用捕获。在这种情况下,generatorlist

答案 1 :(得分:1)

[&]是lambda表达式的一部分,这意味着它将能够通过引用访问所有封闭变量。例如:

int b = 0;
auto my_lambda = [&](int a) { b = a; };
my_lambda(1);
std::cout << b << '\n'; // prints 1

答案 2 :(得分:0)

[&]

表示所有自动变量都将被捕获到lambda表达的范围内。从本质上讲,lambda表达式将能够使用程序在调用时可以访问的变量。