問題タブ [forwarding-reference]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - T const&& が転送参照ではないのはなぜですか?
テンプレートのコンテキストでは、次の「参照の折りたたみ」ルールが適用されます。
なぜ言語は「ユニバーサル参照」がconst
修飾子を持つことを禁止するのですか?
型が参照に解決された場合 (4 つのケースのうち 3 つ) は意味があるように思われます。
このアイデアは、言語の他の設計面と相容れないと確信していますが、全体像を完全に把握することはできません。
c++ - 同じ値を 2 つ以上の関数に転送する
転送参照を使用する場合、同じ値を複数の関数に転送するのは悪い考えですか? 次のコードを検討してください。
が左辺値参照の場合Container
、関数は正常に機能します。ただし、移動が発生すると値が無効になるため、右辺値が渡される状況が心配です。私の疑問は次のとおりです。その場合、値カテゴリを失うことなくコンテナを転送する正しい方法はありますか?
c++ - ユニバーサル参照と転送参照に違いはありますか?
この関数への引数は、右辺値参照にバインドされます。
ただし、この関数の引数は、右辺値または左辺値参照のいずれかにバインドされます。
これが普遍的な参照と呼ばれるのをよく耳にします。
転送参照と呼ばれていることも聞いたことがあります。
同じ意味ですか?
関数本体が呼び出す場合、転送参照のみstd::forward
ですか?
c++ - これは転送参照ですか?
右辺値参照と転送参照の違いは、Scott Meyers によるこの例で十分に明確にされました。
本質的に区別は、推定可能なコンテキストがある場合に発生します。したがって、ケース (3) は、ケース (4) が推定され、(参照崩壊規則を適用した後) 「値カテゴリ」の観点から分類されることを明示的に示していvector<...>&&
ます。T
しかし、もう少し複雑なパターン マッチングではどうなるでしょうか。たとえば、次の場合を考えてみましょう。
こことは&&
どういう意味ですか?
c++ - 明確な型による転送参照動作
テンプレートクラスがあるとします
Args&&...
この場合は右辺値参照であることを理解していstd::move
ますstd::forward
。
次のように、左辺値参照を持つコンストラクターを使用することもできます
問題は、転送参照と同じ動作を得ることができるかどうかですが、明確な型の場合ですか? これが欲しい理由は、次のような構文を使用できるようにするためです
これは、foo(Args&&... args)
コンストラクターを定義すると機能しますが、メンバーのタプル要素の一部を中括弧で囲まれた初期化子リストで初期化し、他の要素を既存のオブジェクト インスタンスからコピーするという混合シナリオは許可されません。
c++ - 右辺値の転送の用途は何ですか?
cppreferencestd::forward
のエントリを読んでいます。
の 2 番目のオーバーロードについては、次std::forward
の例があります。
の型がどこに
arg
あるか
ただし、左辺値か右辺値かは (参照する引数が左辺値の場合は左辺値、そうでない場合は右辺値)forward<T>(arg).get()
を使用しなくても区別できます。次のプログラムはサポートです。std::forward
wrapper
arg
forward<T>(arg).get()
では、アウターの用途は何std::forward
ですか?