移動セマンティクスを使用したベクトルの効率的な展開
非自明なオブジェクトのベクトルを処理する場合、ベクトルが大きくなったときにコンストラクターを移動します。
C では、ベクトルは通常、コピー コンストラクターを使用して展開時に新しい要素をインスタンス化します。ただし、移動コンストラクターとそのパフォーマンス上の利点を活用するには、移動コンストラクターが安全で例外耐性があることを std::vector に明示的に通知することが不可欠です。
これを実現するには、移動コンストラクターを noExcept として宣言し、確実にします。例外をスローしないように std::vector に設定します。例:
A(A &&rhs) noexcept { // Perform move operations... }
noExcept 動作を保証することで、std::vector は例外保証に違反することなく確実に移動コンストラクターを利用できます。
あるいは、次のように宣言することで、デフォルトの移動セマンティクスを明示的に要求できます。 :
A(A &&rhs) = default;
このアプローチでは、次の場合に noexc 移動コンストラクターが自動的に生成されます。
ただし、移動コンストラクターが noExcept でない場合、C 標準に従って例外の安全性を保証できないため、std::vector はそれを呼び出すことができません。
以前のバージョンの Visual Studio では注意してください。 2015 以降では、移動セマンティクスをサポートしているにもかかわらず、このアプローチを完全にはサポートしていない可能性があります。
以上が移動セマンティクスを使用して C ベクトルを効率的に展開するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。