可能重复:
lambdas require capturing 'this' to call static member function?
我想在非静态成员函数中使用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'不是必需的,为什么?
答案 0 :(得分:1)
class A {
static void a() {}
public:
void x() {
[] () { A::a(); }();
}
};
int main() { A a; a.x(); }
用clang 3.2编译好。此外,没有理由不应该编译。根据笔记,这是GCC中的bug。这应该在4.7.1中修复。请注意,gcc早期开始,但在支持某些C ++ 11功能方面落后于clang。
编辑:您可能想要查看类似的SO question。