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!