首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在非静态成员函数中使用c++11 lambda,并调用同一类的静态成员函数。

在非静态成员函数中使用c++11 lambda,并调用同一类的静态成员函数。
EN

Stack Overflow用户
提问于 2012-06-18 05:01:29
回答 1查看 1.8K关注 0票数 3

可能重复: lambdas需要捕获“this”才能调用静态成员函数?

我希望在非静态成员函数中使用c++11 lambda,并调用同一个类的静态成员函数:

代码语言:javascript
复制
class A {
    static void a() {}
public:
    void x() {
        [] () { A::a(); }();
    }
};

但是gcc4.6和gcc4.7都得到了一个错误:错误:这个lambda函数没有捕获' this‘

为什么lambda需要'this‘,因为'a’是一个静态成员函数。

如果'x‘是静态的,或者'a’是其他类的静态成员函数,'this‘是不必要的,为什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-18 05:10:08

代码语言:javascript
复制
class A {
    static void a() {}
public:
    void x() {
        [] () { A::a(); }();
    }
};

int main() { A a; a.x(); }

这在clang3.2中编译得很好。而且,没有理由不对其进行编译。根据注释,这是GCC的错误。这一点应在4.7.1中加以修正。请注意,gcc很早就开始了,但在支持一些C++11特性方面落后于clang。

编辑:有一个类似的所以问题,您可能想要查看。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11077140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档