首頁 >後端開發 >C++ >C 11 的 `std::vector::resize()` 介面是否有效更改值初始化新元素?

C 11 的 `std::vector::resize()` 介面是否有效更改值初始化新元素?

DDD
DDD原創
2024-12-26 14:11:14361瀏覽

Does C  11's `std::vector::resize()` Interface Change Effectively Value-Initialize New Elements?

研究std::vector::resize() 和Boost.Container 的resize() 的行為

在C 03 中,std::vector : :resize() 使用所提供值的副本初始化新指派的元素。 C 11 引入了重載以允許值初始化或透過複製進行初始化。

使用 Boost.Container 的向量(它支援與 C 11 類似的三個 resize() 重載)進行測試來驗證行為。在 C 03 模式下,std::vector 和 Boost.Container 的向量都會如預期運作,以零初始化新元素。

但是,在 C 11 模式下,std::vector 和 Boost.Container 的向量仍然初始化使用用於值初始化的重載時帶有零的新元素。這就提出了一個問題:

C 11 std::vector::resize() 介面變更實際上有效嗎?

結果顯示介面變更並未達到預期效果,因為新元素仍在初始化中

附錄

為了解決現有分配器的限制性,我們提出了一種替代分配器適配器,它提供了一種更安全、更可靠的方法來實現值初始化,而無需初始化所有類型的元素:

template <typename T, typename A=std::allocator<T>>
class default_init_allocator : public A {
  // ... implementation
};

此適配器插入construct()調用以進行值初始化,將它們轉換為默認初始化呼叫。它還可以正確處理預設初始化。

以上是C 11 的 `std::vector::resize()` 介面是否有效更改值初始化新元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn