タグ付けされた質問 「perfect-forwarding」

4
C ++ 11でのT &&(二重アンパサンド)の意味は?
私はC ++ 11の新機能のいくつかを調査してきましたが、気付いたのは、変数の宣言における2つのアンパサンドT&& varです。 まず、この獣は何と呼ばれていますか?Googleがこのような句読点を検索できるようにしてほしい。 正確にはどういう意味ですか? 一見、それは(Cスタイルのダブルポインターのような)二重参照のように見えますが、T** varその使用例を考えるのに苦労しています。

6
フォワードを使用する利点
完全な転送でstd::forwardは、名前付き右辺値参照t1および名前なし右辺値参照への変換に使用されt2ます。それを行う目的は何ですか?&を左辺値のinnerままにすると、呼び出された関数にどのような影響がありますか?t1t2 template <typename T1, typename T2> void outer(T1&& t1, T2&& t2) { inner(std::forward<T1>(t1), std::forward<T2>(t2)); }

6
make_uniqueおよび完全な転送
std::make_unique標準C ++ 11ライブラリに関数テンプレートがないのはなぜですか?見つけた std::unique_ptr<SomeUserDefinedType> p(new SomeUserDefinedType(1, 2, 3)); 少し冗長。次の方がずっといいと思いませんか? auto p = std::make_unique<SomeUserDefinedType>(1, 2, 3); これはnew見事に非表示になり、タイプについては1回だけ言及します。 とにかく、ここに私の実装の試みがありますmake_unique: template<typename T, typename... Args> std::unique_ptr<T> make_unique(Args&&... args) { return std::unique_ptr<T>(new T(std::forward<Args>(args)...)); } std::forwardコンパイルするのにかなり時間がかかりましたが、それが正しいかどうかはわかりません。それは...ですか?正確にはstd::forward<Args>(args)...どういう意味ですか?コンパイラはそれを何で作っていますか?

3
std :: moveとstd :: forwardの違いは何ですか
私はここでこれを見ました: 基本クラスのMoveコンストラクターを呼び出すMoveコンストラクター 誰かが説明できますか: 差std::moveとstd::forward、好ましくは、いくつかのコード例をしますか? それを簡単に考える方法、およびいつ使用するか

1
可変個関数のすべての引数でstd :: forwardをどのように呼び出しますか?
私は単に汎用オブジェクトファクトリを作成し、ブーストプリプロセッサメタライブラリを使用して可変テンプレートを作成していました(2010を使用していて、それらをサポートしていません)。私の関数はrval参照を使用std::forwardし、完全な転送を行うため、私は考えさせられました... C ++ 0Xが出て、標準のコンパイラーがあったとき、実際の可変テンプレートでこれを行います。それでも、私std::forwardは議論を呼びかけますか? template <typename ...Params> void f(Params... params) // how do I say these are rvalue reference? { y(std::forward(...params)); //? - I doubt this would work. } 私が考えることができる唯一の方法は... paramsを手動で解凍することを必要とするでしょう、そして私はまだそこにもまだありません。機能するより速い構文はありますか?

1
要素を完全に転送してstd :: vectorをリスト初期化できますか?
std :: vectorの集約 リストの初期化は、移動がより適切な場合にコピーの初期化を実行することに気付きました。同時に、複数のemplace_backsが必要な処理を実行します。 テンプレート関数を書くというこの不完全な解決策しか思いつかなかったinit_emplace_vector。ただし、明示的ではない単一値コンストラクターにのみ最適です。 template <typename T, typename... Args> std::vector<T> init_emplace_vector(Args&&... args) { std::vector<T> vec; vec.reserve(sizeof...(Args)); // by suggestion from user: eerorika (vec.emplace_back(std::forward<Args>(args)), ...); // C++17 return vec; } 質問 std :: vectorをできるだけ効率的に初期化するために、本当にemplace_backを使用する必要がありますか? // an integer passed to large is actually the size of the resource std::vector<large> v_init { …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.