C 11 および Boost.Container でのベクターの動作: 初期化されていない要素の処理
C アプリケーションでは、ベクターは通常、一時バッファーとして使用されます。適切な容量を確保するために、これらのベクトルにはサイズ変更操作が行われることがよくあります。 C 03 では、 std::vector
C 11 では、resize() の 2 つのオーバーロードが導入されました:
Boost.Container は、追加のオーバーロードでこの機能をさらに拡張します:
これらの関数の動作を確認するには、次のようにします。テストは C 11 std::vector T を使用して実施されました。そして boost::container::vector
予想される動作
C 03の場合std::vector
実際の結果
驚くべきことに、テスト結果では、std::vector
説明
この予期しない動作は、resize() インターフェイスが無効であることを示唆しています。 C 11 で導入された変更は、特定のシナリオでは実際的な効果はありません。 C 03 std::vector
影響
未使用の要素をゼロで初期化することを避ける必要がある場合は、 std::allocator のconstruct() メソッドをインターセプトし、値の初期化をデフォルトの初期化に置き換えるカスタム アロケーターを使用できます。ただし、これをすべての初期化に適用すると、予期しない結果が生じる可能性があるため、慎重に作業を進めてください。
以上がC 11 の `std::vector::resize()` と Boost.Container の `resize()` は初期化されていない要素をどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。