声明全局 lambda C++ 时出现问题 [重复]
Posted
技术标签:
【中文标题】声明全局 lambda C++ 时出现问题 [重复]【英文标题】:Problem while declaring global lambda C++ [duplicate] 【发布时间】: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 表达式不能有默认捕获
但是当我从捕获列表中删除与号时,代码运行得很好。
【问题讨论】:
这能回答你的问题吗? Non local lambda and capturing variables - what does "block scope" means 请阅读Why should I not #include <bits/stdc++.h>?和Why using namespace std is bad practice。 【参考方案1】:不确定我是否正确,但&
使作用域的变量可以通过引用访问 lambda,并且由于您没有传递给 lambda 函数的参数,因此会引发错误。
[]
表示您引用的变量将无权访问,因此当您从捕获列表中删除 &
时,这可能是您的代码运行正常的原因
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
以上是关于声明全局 lambda C++ 时出现问题 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
将全局声明的缓冲区写入 FLASH 时出现 STM32 Hardfault 异常