c++ - 「this」がラムダによってキャプチャされる場合、明示的に使用する必要がありますか?




lambda this-pointer (2)

これは 完全に標準で あり、ラムダがC ++ 11で導入されて以来のものです。

これを書く必要はありません- this-> そこに。

this をラムダでキャプチャする例では、明示的に使用しています。 例えば:

capturecomplete = [this](){this->calstage1done();};

しかし、暗黙的に使用することも可能です。 例えば:

capturecomplete = [this](){calstage1done();};

これをg ++でテストし、コンパイルしました。

これは標準C ++ですか? (もしそうなら、どのバージョン)、またはそれは何らかの形の拡張ですか?


これは標準であり、ラムダが追加されたC ++ 11以降、このようになっています。 cppreference.com よると:

名前の検索、 this ポインターの型と値の決定、および非静的クラスメンバーへのアクセスのために、クロージャー型の関数呼び出し演算子の本体は、ラムダ式のコンテキストで考慮されます。

struct X {
    int x, y;
    int operator()(int);
    void f()
    {
        // the context of the following lambda is the member function X::f
        [=]()->int
        {
            return operator()(this->x + y); // X::operator()(this->x + (*this).y)
                                            // this has type X*
        };
    }
};






this-pointer