-2
std::vector<Foo> v;
v.push_back(Foo());
これはFooの一時変数を作成しますか、これはemplace_back()のように機能しますか?push_back()の一時変数を作成しない方法はありますか?
std::vector<Foo> v;
v.push_back(Foo());
これはFooの一時変数を作成しますか、これはemplace_back()のように機能しますか?push_back()の一時変数を作成しない方法はありますか?
Foo()
は、理論上コンパイラがas-if ruleのためにそれを最適化することを許可されていますが、一時的に作成します。
あなたは
は、コンテナの最後に新しい要素を追加し
vector::emplace_back
を使用することができます。要素はstd::allocator_traits::construct
によって作成されます。通常は、container-newを使用して、コンテナによって提供される場所でその場で要素を構築します。
私のコードで一時変数が作成されるかどうかは疑問です。 – user1701840
質問を編集しましたか、既存の 'emplace_back'参照を見落としましたか?とにかく、 'Foo()'は一時的なものですが、コンパイラはそれを最適化することができます。 – AlexD