我希望在非静态成员函数中使用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‘是不必要的,为什么?
发布于 2012-06-18 05:10:08
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。
编辑:有一个类似的所以问题,您可能想要查看。
https://stackoverflow.com/questions/11077140
复制相似问题