13

fooとして宣言されている場合Foo& foo = ...;、ラムダの値によるキャプチャと参照によるキャプチャのセマンティクスに違いはありますか?

4

2 に答える 2

16

あなたはよくある誤解に陥ったと思います...参照は実際のオブジェクトのエイリアスです。初期化後、参照を使用することは、元のオブジェクトを使用することとまったく同じです。これを考慮すると、質問はほとんど意味がありません。参照オブジェクトの場合、オブジェクトであるかオブジェクトへの参照であるかに関係なく、の動作は[foo](){}まったく同じになります。foo

于 2012-08-31T14:13:29.927 に答える
12

はい、違いがあります。

§5.1.2 [expr.prim.lambda] p14

エンティティが暗黙的にキャプチャされ、capture-defaultがである場合、またはエンティティが。を含まないキャプチャで明示的にキャプチャされている場合、エンティティはコピーによってキャプチャされます。コピーによってキャプチャされたエンティティごとに、名前のない非静的データメンバーがクロージャタイプで宣言されます。これらのメンバーの宣言順序は指定されていません。このようなデータメンバーのタイプは、エンティティがオブジェクトへの参照でない場合は対応するキャプチャされたエンティティのタイプであり、そうでない場合は参照されるタイプです。=&

したがって、参照に値で名前を付ける識別子をキャプチャすると、参照されたオブジェクトのコピーが取得されます。

于 2012-08-31T14:00:32.100 に答える