2012-08-31 17 views

答えて

12

はい、違いがあります。

§5.1.2 [expr.prim.lambda] p14

エンティティは、それが暗黙的に取得し、それが明示的&が含まれていませんキャプチャで撮影されている場合キャプチャ - デフォルト=あるかされている場合コピーで撮影しです。コピーによってキャプチャされた各エンティティに対して、名前の付いていない非静的データメンバーがクロージャタイプで宣言されます。これらのメンバーの宣言の順序は不明です。 このようなデータメンバのタイプは、エンティティがオブジェクトへの参照でない場合に対応するキャプチャされたエンティティのタイプがであるか、そうでない場合は参照タイプです。

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

+0

これは、この出力が間違っていることを意味しますか?:http://ideone.com/L64Ul – jrok

+2

グローバル変数へのアクセスが許可されているので、いいです。 0を使ってiを初期化することを忘れない限り、出力は2になるはずです。 – JohnB

+0

@John:ありがとう、私はキャプチャと使用された変数との間の相違を見落としました。今、[予想されるエラー](http://liveworkspace.org/code/6f2da9b2b748758e5563fd424408b334)を取得しています。また、グローバル組み込み型はゼロで初期化されます。 :) – Xeo

16

私はあなたがよくある誤解に陥ったと思います...参考文献はの別名の実物です。初期化後、参照の使用は元のオブジェクトの使用とまったく同じです。これを考慮すると、質問はほとんど意味がありません。参照がオブジェクトである場合、は、オブジェクトまたはオブジェクトへの参照であるかどうかにかかわらず、まったく同じになります。

+2

@エルフ:私が言ったことをあなたが理解したとは思わない。もちろん、* copy *と* reference *は全く別のものです。あなたが把握していないように見えるのは、*初期化後*の参照は**元のオブジェクトへのエイリアス**です。基本的なポインタがあるかどうかにかかわらず、セマンティクスは、元の*オブジェクトが使用されたかのようになります。あなたの全体のコメントはオフトラックです。 –

+0

ああ、それはより理にかなっています!申し訳ありませんが私はあなたの答えを間違って読む。人を混乱させないようにコメントを削除します。 – Eloff

+1

@Eloff:ダビデの反応を見ることができないので、今や人々を混乱させる。 ; - ] – ildjarn

関連する問題