インラインラムダ初期化子は 'this' ポインタをキャプチャできますか? 質問する

インラインラムダ初期化子は 'this' ポインタをキャプチャできますか? 質問する

インライン メンバー初期化ラムダはthisポインターをキャプチャして使用できますか?

struct A{
  int a = 42;
  int b = [this](){
    return this->a * 4;
  }();
};

これは有効な C++11 コード (仕様に準拠) ですか、それとも単なる GCC 拡張ですか?

有効な場合、this->メンバーを参照するときに を使用する必要があるのはなぜですかa?

ベストアンサー1

有効な C++11 コードですか?

いいえ。ブロック スコープ内のラムダのみがキャプチャ リストを持つことができます。

C++11 5.1.2/9 Aラムダ式最小の囲みスコープがブロックスコープであるものはローカルラムダ式; 他のラムダ式有してはならないキャプチャリストそのラムダイントロデューサー

これはGCCの拡張機能のようです。(コメントにもあるように、これは未解決の問題なので、いつか標準になる可能性もあります。

this->メンバーAを参照するときになぜ使用する必要があるのですか?

少なくとも私が使用している GCC のバージョンでは必要ありません。http://ideone.com/K857VC

おすすめ記事