【问题标题】:Why c++ Lambda Expression Not working为什么 c++ Lambda 表达式不起作用
【发布时间】:2016-10-23 14:01:49
【问题描述】:

我对这个功能非常陌生,我只是在阅读 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";
  }
}

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

【问题讨论】:

  • 您创建了 lambda 并将其丢弃。您需要调用 () 运算符来运行它。
  • @RaymondChen 明白了.. 解决了这个问题.. 谢谢.. :)

标签: c++ c++11 lambda


【解决方案1】:

你的假设是正确的,只要你调用它。

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

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

Lambda Expression without capture -&gt; functionPtr -&gt; bool (true for non-null functionPtr)

-&gt; 是隐式转换

改为使用(lambdaExpression)()lambdaExpression() 来调用它。

【讨论】:

    猜你喜欢
    • 2013-05-18
    • 1970-01-01
    • 2015-04-13
    • 2014-06-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多