3

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

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

class A {
    static void a() {}
public:
    void x() {
        [] () { A::a(); }();
    }
};

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

为什么 lambda 需要 'this' 因为 'a' 是静态成员函数。

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

4

1 回答 1

1
class A {
    static void a() {}
public:
    void x() {
        [] () { A::a(); }();
    }
};

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

这与 clang 3.2 编译得很好。此外,没有理由不编译它。根据注释,这是 GCC 中的一个错误。这应该在 4.7.1 中修复。请注意,gcc 起步较早,但在支持某些 C++11 特性方面落后于 clang。

编辑:有一个类似的SO question,您可能想查看。

于 2012-06-18T05:10:08.470 回答