13

C++ラムダ式のcapture-listでcapture = -defaultモードが禁止さthisれているのはなぜか疑問に思います。

あれは、

[=, this]{ };  // error
[&, this]{ };  // OK

これはC++11 5.1.2/8で指定されています。

  • lambda-captureに&であるcapture-defaultが含まれている場合、lambda-captureの識別子の前に&を付けてはなりません。
  • lambda-captureに=であるcapture-defaultが含まれている場合、lambda-captureにはこれが含まれておらず、含まれている各識別子の前に&が付いている必要があります。

Q:このルールの理由や背景説明はありますか?

4

1 に答える 1

11

thisコピーによってのみキャプチャでき、参照によってキャプチャすることはできません。[&]、のみを指定した場合でもthis、odr-usedの場合、コピーによって暗黙的にキャプチャできます。したがって、これ[=, this]はエラーです。これは、 inが参照によるキャプチャを意味し、暗黙的にキャプチャしない(odrで使用されている場合を除く)一方で、=すでに暗黙的thisにコピーによってキャプチャされるためです。&[&, this]this

于 2012-10-20T21:35:04.040 に答える