c++ - 在类中声明的 lambda 表达式是否是该类的成员?
问题描述
这是我的问题的另一个标题:是否允许 lambda 表达式中的私有/受保护成员访问?
还有一个,A lambda 可以访问周围范围的变量。周围的范围究竟是什么?
我知道的事实:
简而言之,下面是一个代码片段,展示了我的困惑。
我已经在GCC 7.4.0
(WSL 上的 Ubuntu 18.04)和CL 19.22.27905
(VS2019 社区)上对其进行了测试,并且在这两个平台上,此代码都已通过。
class A {
int a = 0;
public:
void access();
};
A* getPointer() {
static A a;
return &a;
}
void runFunction(void(*fp)(int i)) {
fp(1);
}
void A::access() {
runFunction([](int i){
getPointer()->a = i; // Here, is the access of variable `a` legal?
});
}
// Just for running the program
int main() {
getPointer()->access();
}
一方面,这是合法的,因为该变量被access()
类的成员函数()使用(事实 2)。
但另一方面,该函数并不直接访问它。相反,它是在 lambda 表达式中访问的,该表达式被转换为函数指针。
在这种情况下,A::access()
应该类似于:
void lambda(int i) {
getPointer()->a = i;
}
void A::access() {
runFunction(lambda);
}
这段代码肯定有语法错误。
我有点困惑。
解决方案
推荐阅读
- django - django 中 User.objects.create_user() 与 User.objects.create() 与 User().save() 之间的区别
- jquery - 将社交图标的自定义代码添加到 Wordpress 主菜单
- android - 在 Flutter 中获取 Instagram 见解
- java - Gradle + SpringBoot: :integrationTest 未在构建任务中执行
- javascript - 摘要式身份验证:从 javascript 获取浏览器存储的用户名
- nginx - 当“113:没有路由到主机”错误发生时,为什么 Nginx 不会将所有流量重新路由到适当的实例?
- git - git remote add new-origin 仅影响 master 分支,其余分支不受影响
- c# - 是否可以在 xamarin 表单中从第一页到第二页访问进度条?
- api - 通过 api rest 更新共享点文档的属性
- vba - 应用带有 Or 运算符的 If Then 语句来确定 am/pm