Foo& foo = ...;
と宣言されたfoo
の場合、ラムダの値による取り込みと参照による取り込みのセマンティクスには違いがありますか?'foo'が参照変数である場合、[&foo] {...}キャプチャと[foo] {...}キャプチャの間に違いはありますか?
答えて
はい、違いがあります。
§5.1.2 [expr.prim.lambda] p14
エンティティは、それが暗黙的に取得し、それが明示的
&
が含まれていませんキャプチャで撮影されている場合キャプチャ - デフォルトが=
あるかされている場合コピーで撮影しです。コピーによってキャプチャされた各エンティティに対して、名前の付いていない非静的データメンバーがクロージャタイプで宣言されます。これらのメンバーの宣言の順序は不明です。 このようなデータメンバのタイプは、エンティティがオブジェクトへの参照でない場合に対応するキャプチャされたエンティティのタイプがであるか、そうでない場合は参照タイプです。
したがって、値で参照の名前を付ける識別子を取得すると、参照されるオブジェクトのコピーが取得されます。
これは、この出力が間違っていることを意味しますか?:http://ideone.com/L64Ul – jrok
グローバル変数へのアクセスが許可されているので、いいです。 0を使ってiを初期化することを忘れない限り、出力は2になるはずです。 – JohnB
@John:ありがとう、私はキャプチャと使用された変数との間の相違を見落としました。今、[予想されるエラー](http://liveworkspace.org/code/6f2da9b2b748758e5563fd424408b334)を取得しています。また、グローバル組み込み型はゼロで初期化されます。 :) – Xeo
私はあなたがよくある誤解に陥ったと思います...参考文献はの別名の実物です。初期化後、参照の使用は元のオブジェクトの使用とまったく同じです。これを考慮すると、質問はほとんど意味がありません。参照がオブジェクトである場合、は、オブジェクトまたはオブジェクトへの参照であるかどうかにかかわらず、まったく同じになります。
@エルフ:私が言ったことをあなたが理解したとは思わない。もちろん、* copy *と* reference *は全く別のものです。あなたが把握していないように見えるのは、*初期化後*の参照は**元のオブジェクトへのエイリアス**です。基本的なポインタがあるかどうかにかかわらず、セマンティクスは、元の*オブジェクトが使用されたかのようになります。あなたの全体のコメントはオフトラックです。 –
ああ、それはより理にかなっています!申し訳ありませんが私はあなたの答えを間違って読む。人を混乱させないようにコメントを削除します。 – Eloff
@Eloff:ダビデの反応を見ることができないので、今や人々を混乱させる。 ; - ] – ildjarn
- 1. foo(int * arr)とfoo(int arr [])の違いはありますか?
- 2. PHP:{$ foo}と$ {foo}の違いはありますか
- 3. Foo * fooの違い。とフーfoo; C++で
- 4. 「fooがnullである」と「FOO == null」の違いは何ですか
- 5. Clojureのfoo、:: foo、:: bar/foo、および:bar/fooの違いは何ですか?
- 6. クラスfoo、クラスfoo()とクラスfoo(オブジェクト)の違いは?
- 7. ruby on railsでfoo [:product] = "abc"とfoo ["product"] = "abc"の間に違いはありますか?
- 8. "if(foo)bar();"の違いと "foo && bar();"
- 9. if(x){foo();の違い}とx? foo():0;
- 10. エクスプレスルートの `/:foo *`と `/:foo(。*)`の違いは何ですか? Expressで
- 11. `foo asは? Foo`はkotlinの `foo as Foo`と完全に等価ですか?
- 12. クラスFooにはオブジェクトBar、FooテーブルにはBarオブジェクトへのポインタがありません。BarオブジェクトにはFoo to Fooがあります。
- 13. なぜconst char * foo = "Hello"ですか; constではないコンパイルint * foo = 5 ;?私が間違っている場合
- 14. `foo = require" foo "` foo "require" foo "`
- 15. は、コンストラクタはFoo :: Fooのはfooへの参照を受け取るが、コピーコンストラクタではない
- 16. params [:foo]と@fooの違いは何ですか?
- 17. if(!isset($ foo)OR(isset($ foo)AND $ foo == $ bar)) `または` if(!isset($ foo)OR $ foo == $ bar) `が良いですか?
- 18. Stream.generate(foo).parallel()の場合、fooはスレッドセーフでなければなりませんか?
- 19. var foo = foo ||警告(foo);
- 20. コード "foo :: foo :: foo :: foob"がコンパイルされているのはなぜですか?
- 21. 角度4の[(ngModel)] = "foo"と#fooの違いは?
- 22. テンプレートクラスFooメソッドの引数は "Foo&"で、 "Foo <T>&"は同じですか?
- 23. 絶対( "/ foo")と相対( "../foo")のファイル名。 「foo」カテゴリとは何ですか?
- 24. JavaScript:Reflect.get()とobj ['foo']の違い
- 25. (FOOまたはバーやバズ)がある場合なし:
- 26. `{foo}`をインポートすると `foo`を書き出すことができませんが、` {foo} `をエクスポートする必要はありますか?
- 27. Scala:Option [Foo]とFooのパラメータとのパターンマッチング
- 28. (?:foo)がすでに存在する場合、正規表現の(?= foo)のポイントは何ですか?
- 29. index.phpを書き直すfoo = bar & bar = foo to index.php?foo = bar&bar = foo
- 30. javascriptでは、fooが関数の場合、foo()とfooの違いは何ですか?そして、高次関数にargとして渡されたときにどう違いますか?
あなたはわかりやすいように編集してもらいたいと思っています。 – Xeo