Ist das Verhalten von Vector::resize() unter C 11 und Boost.Container konsistent?
Das Verhalten von std::vector:: resize() wird häufig zum vorübergehenden Puffern von Daten verwendet, um deren Größe vor der Verwendung auf die entsprechende Größe zu ändern. In C 03 erstellte std::vector::resize() neue Elemente durch Kopieren, aber C 11 führte eine Überladung ein, die neue Elemente ohne Kopieren initialisiert.
Boost.Container bietet eine zusätzliche default_init-Überladung für boost:: container::vector::resize(), das neue Elemente mit Standardwerten initialisiert. Diese Funktion steht im Einklang mit der Designphilosophie von C 11, nur für das zu bezahlen, was Sie brauchen.
Beim Testen des Verhaltens von std::vector und boost::container::vector sowohl im C 03- als auch im C 11-Modus zeigten sich unerwartete Ergebnisse wurden beobachtet. Sowohl in C 03 als auch in C 11 führte die Größenänderung des Vektors ohne Angabe der Initialisierung immer noch dazu, dass keine neuen Elemente für std::vector und boost::container::vector initialisiert wurden.
Dieses Verhalten weist darauf hin, dass sich die Schnittstelle geändert hat in std::vector hat keinen Einfluss auf die Implementierung und die letzten in resize() hinzugefügten Elemente werden weiterhin mit Nullen initialisiert. Es stellt sich die Frage, ob dieses Verhalten korrekt ist.
Das obige ist der detaillierte Inhalt vonZeigen „std::vector::resize()' und „boost::container::vector::resize()' ein konsistentes Null-Initialisierungsverhalten über alle C-Standards hinweg?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!