C 11 Vector::resize() 標準およびブースト コンテナ ライブラリでの動作
vector::resize() が C でオーバーホールされました11 を使用して、要素の初期化をより詳細に制御できます。ただし、標準ライブラリと C 03 モードの Boost.Container の両方での動作に関して懸念が提起されています。
標準ライブラリ
vector::resize() C 11 より前の標準ライブラリの関数では、値を渡すことによって要素を初期化できます。ただし、C 11 では、関数は 2 つのオーバーロードに分割されました。1 つは値の初期化用で、もう 1 つはコピーによる初期化用です。
Boost.Container
Boost.Container もVector::resize() の 3 つのオーバーロードを提供します。値の初期化、デフォルトの初期化 (Boost 固有の機能)、およびによる初期化です。 copy.
所見
最近のテストにより、標準ライブラリと Boost.Container の両方の Resize() 動作が C 03 モードでの期待と矛盾していることが明らかになりました。理想的には、size() は 3 つのテスト (値、デフォルト、およびコピーの初期化) すべてで同じように動作するはずですが、結果は、特にデフォルトの初期化を要求するテストのみが目的の出力を生成することを示しています。
結論
動作の不一致は、C 11 で追加された要素のように、vector::resize() インターフェイスの変更が完全には反映されていない可能性を示唆しています。明示的なデフォルト初期化を行わずに、標準テストと Boost.Container テストで最後のsize()呼び出しが依然としてゼロで初期化されます。この動作の理由を特定するには、さらなる調査が必要です。
以上が標準コンテナ ライブラリとブースト コンテナ ライブラリを使用した C 03 での「vector::resize()」の動作はどのように異なりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。