3

重複の可能性:
ラムダでは、静的メンバー関数を呼び出すために「this」をキャプチャする必要がありますか?

非静的メンバー関数で c++11 ラムダを使用し、同じクラスの静的メンバー関数を呼び出したい:

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

しかし、gcc4.6 と gcc4.7 の両方でエラーが発生しました: error: 'this' was not capture for this lambda function

「a」は静的メンバー関数であるため、ラムダに「this」が必要なのはなぜですか。

また、「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の質問があります。

于 2012-06-18T05:10:08.470 に答える