为什么c ++ Lambda Expression无效

时间:2016-10-23 03:49:58

标签: c++ c++11 lambda

我对这个功能非常陌生,我只是在c ++中阅读Lambda表达式并尝试在一个简单的程序中实现它。

int main()
{
  std::string name;
  int a = 5;
  std::cout << "What is your name? ";
  getline (std::cin, name);
  for([&](){a = 7;};a > 0; a--)
  {
    std::cout << "Hello, " << name << "!\n";
  }
}

但它没有像我想的那样工作.. 我的假设:[&](){a = 7;}这会将变量a的值从5改为7,但不是...... 代码有什么问题吗?或者只是我的假设不正确?

1 个答案:

答案 0 :(得分:1)

如果调用,您的假设是正确的。

  

[&amp;]:通过引用隐式捕获。可以使用所有本地名称。所有局部变量都是   通过引用访问。

您可以访问本地变量,但不会调用lambda本身。这就是您的代码中发生的事情:

Lambda Expression without capture -> functionPtr -> bool (true for non-null functionPtr)

其中->是隐式转化

而是(lambdaExpression)()lambdaExpression()来调用它。