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

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

DDD
發布: 2024-10-23 17:59:03
原創
394 人瀏覽過

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中文網其他相關文章!

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板