【问题标题】:What does [&] in the declaration of [&](Type& variable) mean? [duplicate][&](Type& variable)的声明中的[&]是什么意思? [复制]
【发布时间】:2015-04-27 15:16:22
【问题描述】:
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); }    );

[&](Number& n) 是什么意思,我更具体地问 [&] 是什么意思。

【问题讨论】:

  • 这不是 C++11 中的 Lambda 表达式吗?

标签: c++


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:
      [&]
      

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

      【讨论】:

        猜你喜欢
        • 2015-10-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-21
        • 2015-06-07
        • 1970-01-01
        相关资源
        最近更新 更多