問題タブ [perfect-forwarding]

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 投票する
1 に答える
50319 参照

c++ - 可変引数関数のすべての引数で std::forward を呼び出すにはどうすればよいですか?

私はちょうどジェネリック オブジェクト ファクトリを作成し、boost プリプロセッサ メタ ライブラリを使用して可変個引数テンプレートを作成していました (2010 を使用しており、それらをサポートしていません)。私の関数は rval 参照を使用std::forwardして完全な転送を行い、考えさせられました... C++ 0X が出てきて標準コンパイラがあれば、実際の可変個引数テンプレートでこれを行うでしょう。しかし、どうすればstd::forward引数を要求できますか?

私が考えることができる唯一の方法は、 ...params の手動アンパックを必要とすることであり、私もまだそこにいません。動作するより高速な構文はありますか?

0 投票する
7 に答える
92505 参照

c++ - std::forward を使用する主な目的と、それによって解決される問題は何ですか?

完全転送では、名前付き右辺値参照を名前なし右辺std::forward値参照に変換するために使用されます。それを行う目的は何ですか?&を左辺値のままにしておくと、呼び出された関数にどのような影響がありますか?t1t2innert1t2

0 投票する
5 に答える
1717 参照

c++ - 継承コンストラクターは C++ でどのように役立ちますか?

私が C++ 標準委員会の会議に出席しているとき、彼らは継承コンストラクターを削除することの長所と短所について議論しています。これは、コンパイラ ベンダーがまだそれを実装していないためです (ユーザーが要求していないという意味です)。

継承コンストラクターとは何かを簡単に思い出させてください。

一部のベンダーは、右辺値参照と可変個引数テンプレート (完全な転送コンストラクター) を使用して、継承コンストラクターを不要にする継承クラスで転送コンストラクターを提供することは簡単であると提案しています。

例:

2 つの質問があります。

1) コンストラクターを継承することで大きなメリットが得られるプログラミング経験から、実際の (不自然な) 例を提供できますか?

2)「完全な転送コンストラクター」が適切な代替手段になることを妨げる、考えられる技術的な理由はありますか?

ありがとう!

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

c++ - std :: forwardがconstexpr-nessを破棄するのはなぜですか?

宣言されていない場合constexprstd::forward引数を転送する関数のconstexpr-nessは破棄されます。constexpr-nessを維持できるように、それ自体が宣言されていないのはなぜですか?std::forwardconstexpr

例:(g++スナップショットでテスト済み-2011-02-19)

注:技術的には、std::forwardconstexprを作成するのは簡単です。たとえば、次のようになります(gでは)std::forwardに置き換えられていることに注意してください。fix::forward

私の質問は:なぜstd::forwardのように定義されていないのfix::forwardですか?

注2:この質問は、constexpr std :: tupleに関する他の質問とある程度関連しています。これは、cstrを右辺値で呼び出すことによって作成できない技術的な理由ですが、ここでの質問は明らかに(はるかに)より一般std::forward的ですconstexprstd::tuple

0 投票する
4 に答える
271171 参照

c++ - C ++ 11でのT&&(ダブルアンパサンド)とはどういう意味ですか?

私はC++11の新機能のいくつかを調べてきましたが、気付いたのは、のような変数を宣言する際の2つのアンパサンドですT&& var

まず、この獣は何と呼ばれていますか?Googleがこのような句読点の検索を許可してくれることを願っています。

正確にはどういう意味ですか?

一見、ダブルリファレンス(CスタイルのダブルポインタのようにT** var)のように見えますが、そのユースケースを考えるのに苦労しています。

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

c++ - 末尾の戻りタイプとしてdecltypeを使用する正しい方法

このフォームの例をよく目にします。

しかし、私はあえてこれがより正しい方法であると言います:

なんで?何よりもまず、この例のdecltypeはリターンタイプを推測するだけでよいので、(t + u)はリターンタイプではなく(std :: forward(t)+ std :: forward(u))、2つのverによって生成される2番目のコードは同一であり、3番目のdecltype(u + t)はより直接的であり、実装の「根性」を引き出すことなく、プログラマーの意図が何であるかを正確に表現します。

このテーマについてどう思いますか?

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

c++ - 完全転送はどのように機能しますか?

重複の可能性:
forward を使用する利点

完全転送の考え方は、テンプレート内の正確な CV 修飾子を他のテンプレートに転送することです。

ただし、RValue-references 機能を使用するため、名前付き変数にバインドできません。(おもう?)

名前付き変数にバインドできない場合、転送はどのように「完璧」になりますか?

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

c++11 - const-correctness を使用した可変長 zip 関数の実装

関数を実装しようとしていzipます。 zipのパラメータは eachwrapped<Ti>で、パラメータごとにTi異なります。

zipはこれらwrapped<Ti>の を取り、wrapped<tuple<T1&,T2&,...TN&>>、つまりtupleそのパラメータへの参照のラップを生成します。参照はconst-ness を保持する必要があります。

zipこれは、一般的には機能しない 1 つのパラメーターを使用した最初の試みです。

の単一バージョンで一般的な可変個のケースを実装する方法はありzipますか?

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

c++ - このコードは合法ですか? (C++0x 移動セマンティクス)

このコードが C++0x で合法であるかどうかについて興味があります。具体的には、関数で宣言されたオブジェクトは、で宣言されmove_it()たオブジェクトに適切に移動されmain()ますか?

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

c++11 - 完全な転送 - それは何ですか?

重複の可能性:
forward を使用する利点

完全転送とは何か説明してもらえますか?