ベクトル拡張のための移動セマンティクスの活用
C で非自明なオブジェクトを扱う場合、パフォーマンスを最適化するために移動セマンティクスを活用することが重要です不要なコピー操作を削減します。この記事では、オブジェクトのベクトルに対して移動セマンティクスを適用し、ベクトルが大きくなったときに確実に移動コンストラクターが使用されるようにする方法について検討します。
noexc 指定子は、コンパイラに、 move コンストラクターは例外をスローしません。以下のコードに示すように、移動コンストラクターを noExcept で実装すると、ベクトルが展開されるときに移動コンストラクターが呼び出されます。
A(A && rhs) noexcept { std::cout << "i am the move constr" <<std::endl; ... some code doing the move ... m_value=std::move(rhs.m_value) ; // etc... }
このアプローチは、操作に対する厳格な例外保証を必要とする C 標準に準拠しています。 std::vector.
効率を最適化するには、不要な処理を避けるため、push_back の代わりに emplace_back メソッドの使用を検討してください。コピーすること。 Visual Studio 2015 以前の初期バージョンでは、移動セマンティクスをサポートしているにもかかわらず、この機能をサポートしていない可能性があることに注意してください。
以上が移動セマンティクスは C でのベクトル展開をどのように最適化できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。