Heim >Backend-Entwicklung >C++ >Wie verhält sich „vector::resize()' in C 03 mit Standard- und Boost-Containerbibliotheken unterschiedlich?

Wie verhält sich „vector::resize()' in C 03 mit Standard- und Boost-Containerbibliotheken unterschiedlich?

Susan Sarandon
Susan SarandonOriginal
2024-12-01 08:04:10695Durchsuche

How Does `vector::resize()` Behave Differently in C  03 with Standard and Boost Container Libraries?

C 11 vector::resize() Verhalten mit Standard- und Boost-Containerbibliotheken

vector::resize() wurde in C überarbeitet 11, um eine detailliertere Kontrolle über die Elementinitialisierung zu ermöglichen. Es wurden jedoch Bedenken hinsichtlich seines Verhaltens sowohl unter der Standardbibliothek als auch unter Boost.Container im C 03-Modus geäußert.

Standardbibliothek

Der vector::resize() Die Funktion in der Standardbibliothek vor C 11 ermöglicht die Elementinitialisierung durch Übergabe eines Werts. In C 11 wurde die Funktion jedoch in zwei Überladungen aufgeteilt: eine für die Wertinitialisierung und eine für die Initialisierung per Kopie.

Boost.Container

Boost.Container ebenfalls stellt drei Überladungen von vector::resize() bereit: Wertinitialisierung, Standardinitialisierung (eine Boost-spezifische Funktion) und Initialisierung über kopieren.

Beobachtungen

Ein kürzlich durchgeführter Test ergab, dass das resize()-Verhalten sowohl in der Standardbibliothek als auch in Boost.Container nicht mit den Erwartungen im C 03-Modus übereinstimmt. Während sich resize() im Idealfall bei allen drei Tests (Wert-, Standard- und Kopierinitialisierung) gleich verhalten sollte, zeigen die Ergebnisse, dass nur der Test, der speziell die Standardinitialisierung anfordert, die gewünschte Ausgabe erzeugt.

Schlussfolgerung

Die Diskrepanz im Verhalten deutet darauf hin, dass die Schnittstellenänderung vector::resize() in C 11 möglicherweise nicht vollständig wirksam geworden ist, da die hinzugefügten Elemente im Finale resize()-Aufrufe werden in den Standard- und Boost.Container-Tests ohne explizite Standardinitialisierung immer noch mit Nullen initialisiert. Weitere Untersuchungen sind erforderlich, um den Grund für dieses Verhalten zu ermitteln.

Das obige ist der detaillierte Inhalt vonWie verhält sich „vector::resize()' in C 03 mit Standard- und Boost-Containerbibliotheken unterschiedlich?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn