問題タブ [universal-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.

0 投票する
3 に答える
118 参照

c++ - ユニバーサル リファレンス C++11 コードの複製

私のプロジェクトでは、次のような機能があります。

これにより、がコピーされて に追加Pairされます。VectorListPair

次のように使用できます。

ただし、2番目のケースでは不要なオブジェクトが作成されるため、やりたい

これがベクター(gcc、llvm)でどのように行われるかを確認しましたが、 equal / std::move() 行を除いて、両方のメソッドに100%同じコードがあります。

コードを複製せずにそれを行う方法はありますか?


put()これに似ています:

0 投票する
0 に答える
365 参照

c++ - 「ユニバーサル参照」パラメーターに適用される const

ユニバーサル リファレンスに関するScott Mayers の記事を偶然見つけました。

私が理解した普遍的な参照から、それはいくつかの型T&&が異なるコンテキストで右辺値または左辺値型を意味する可能性があるということです。

例えば:

上記の例では、テンプレート パラメーターに応じてT&&、左辺値または右辺値のいずれかになります。つまり、呼び出し方によって異なります。f

ただし、スコットによると、const上記の例に適用すると、型T&&は常に右辺値です。

記事からの引用:

const 修飾子を単純に追加するだけで、「&&」がユニバーサル参照として解釈されなくなります。

質問:constが「ユニバーサル」参照右辺値を作成するのは なぜですか?

次のコードは混乱を招くため、これは不可能だと思います。

0 投票する
1 に答える
212 参照

c++ - 型制約と暗黙的な変換を C++11 ユニバーサル参照と組み合わせる方法は?

関数では、左辺値と右辺値の参照を区別する必要があるため、明らかなパスはオーバーロードすることです。

これは、適切に定義された型と暗黙の変換を備えた、まさに望ましい動作をしています。ただし、コードの重複が多すぎるため、関連する決定を内部にカプセル化し、単一の関数のみを保持することを希望するため、ユニバーサル参照による受け渡しがオプションになる場合があります。

ただし、これには不幸な欠点があり、現在は任意のオブジェクトを最初のパラメーターとして渡すことができるため、enable_if を介して制約を課すことができます。

これはほとんど仕事をしているように見えますが、(すでにテンプレート化していると思います) 暗黙的な変換コンストラクターを型 A (型 C パラメーターからなど) にトリガーできるオーバーロードの優れたプロパティを失いました。一部の関数には 3 つ以上の A&& パラメーターがあり、組み合わせの爆発を処理する意図がないため、オーバーロードはオプションではありません。暗黙の変換を何らかの方法で回復できますか? もちろん、回避策の 1 つは、たとえば、A に許可されている他のパラメーター型を追加し、メイン関数で必要な変換を実行することです。それでも変換によって右辺値を生成します)。もっと良い方法はありますか?

0 投票する
1 に答える
363 参照

c++ - このコードの && の利点は何ですか?

次のコードで、を使用する利点は何&&ですか? コードは、Specialize same operator for different traits の回答からのものです。

この質問から、&&引数は、関数によって変更できる参照であることを意味することがわかります。

decay_tstd:: decayとは何ですか

std::forwardhere で説明されているように、完全な転送です。なぜこの転送が必要なのですか?

ありがとう。

0 投票する
2 に答える
21525 参照

c++ - ユニバーサル参照と転送参照に違いはありますか?

この関数への引数は、右辺値参照にバインドされます。

ただし、この関数の引数は、右辺値または左辺値参照のいずれかにバインドされます。

これが普遍的な参照と呼ばれるのをよく耳にします。
転送参照と呼ばれていることも聞いたことがあります。
同じ意味ですか?
関数本体が呼び出す場合、転送参照のみstd::forwardですか?

0 投票する
2 に答える
126 参照

c++ - std::vector からの要素の移動std::vector へ>

std:: 特定の型 (T1) のベクトルから同じ型 (T1) と別の型 (T2) の std::pair のベクトルに要素を移動する最も正確で効率的な方法は何ですか?

つまり、MoveItems() はどのように記述すればよいのでしょうか。

お時間を割いてご協力いただき、誠にありがとうございました。