首頁  >  文章  >  後端開發  >  為什麼 std::array 缺少帶有值初始化的建構子?

為什麼 std::array 缺少帶有值初始化的建構子?

DDD
DDD原創
2024-10-23 17:59:03308瀏覽

Why Does std::array Lack a Constructor with Value Initialization?

為什麼 std::array 沒有具有值初始化的建構子?

std::array 是代表固定值的類別size 數組,但它缺少一個為其所有元素獲取值的建構子。缺少這樣的建構函式可能看起來令人費解,尤其是當像 std::vector 這樣的動態容器具有類似的建構函式時。

這種省略是故意的,因為 std::array 被設計為聚合類型。 C 中的聚合是僅由資料成員組成且沒有使用者宣告的建構函式的類別。因此,std::array 只能使用大括號括起來的初始化列表或透過複製/移動構造來初始化。

雖然 std::array 提供了一個 fill 方法來為所有元素賦值,但它不能取代對於具有值初始化的建構子。 fill 方法對已建構的陣列進行操作,初始化其元素,但不影響構造之前的記憶體狀態。

如果需要使用特定值(-1) 初始化std::array 的所有元素在您的範例中),您可以使用預設構造,然後使用fill:

<code class="cpp">std::array<int, 10> myArray; // default construction (uninitialized memory)
myArray.fill(-1); // initialize all elements with -1</code>

預設構造不會將聚合的記憶體歸零,因此fill 方法可以正確初始化所有元素,而無需覆寫歸零值。請注意,對於非平凡的可初始化類型,此行為可能會發生變化。

以上是為什麼 std::array 缺少帶有值初始化的建構子?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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