【问题标题】:Problem while declaring global lambda C++ [duplicate]声明全局 lambda C++ 时出现问题 [重复]
【发布时间】:2021-09-16 17:35:33
【问题描述】:

#include<bits/stdc++.h>
using namespace std;


auto fnc = [&]()->void{

    cout << "HELLO WORLD";
    return;
};


int main()
{

    fnc();


    return 0;
}

编译此 C++ 代码时发生错误: 非本地 lambda 表达式不能有默认捕获

但是当我从捕获列表中删除与号时,代码运行得很好。

【问题讨论】:

标签: c++ generics lambda global-variables global


【解决方案1】:

不确定我是否正确,但&amp; 使作用域的变量可以通过引用访问 lambda,并且由于您没有传递给 lambda 函数的参数,因此会引发错误。

[] 表示您引用的变量将无权访问,因此当您从捕获列表中删除 &amp; 时,这可能是您的代码运行正常的原因

https://docs.microsoft.com/en-us/cpp/cpp/lambda-expressions-in-cpp?view=msvc-160

更新:

auto lambda = [&]() -> void{
    cout << "Hola mundo";
};

int main()
{
    lambda();
    return 0;
}`

【讨论】:

  • 我认为这不会有什么不同。但是当我使用 gcc 版本 6 或更低版本的默认捕获编译上面的代码时,它工作得很好
  • 好的,您是否尝试过删除return 关键字?如果 if 是 void 函数,那么它不应该返回任何东西。编辑:这是我编写的代码,它与您的代码完全相同,但没有 return 关键字。 (我更新了答案)
  • 还有,为什么要加bits/stdc++.h
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-11
  • 1970-01-01
  • 2011-09-16
  • 1970-01-01
  • 1970-01-01
  • 2012-11-27
  • 2014-01-21
相关资源
最近更新 更多