首頁  >  文章  >  後端開發  >  std::array 在 C 11 中是預設初始化的嗎?

std::array 在 C 11 中是預設初始化的嗎?

Linda Hamilton
Linda Hamilton原創
2024-10-30 11:47:02915瀏覽

Is std::array Default-Initialized in C  11?

std::array 的預設初始化

C 11 引入了std::array 資料結構,它類似於C 風格的數組,但提供了額外的功能,例如template-基於類型規範和編譯時大小確定。然而,出現了一個常見問題:在沒有明確初始化的情況下聲明 std::array 是否會導致每個元素的預設初始化?

根據 C 語言規格 (§8.5/11),任何沒有明確初始化程序的物件進行預設初始化。這包括 std::array 物件。預設初始化會初始化非類別類型的對象,但對於類別類型的物件(std::array 就是),它會呼叫預設建構子。

但是,cppreference 文件提到預設建構子「default-建構或複製建構陣列的每個元素。」這表示 std::array 可能不會對每個元素執行預設初始化。

答案:

是的,預設情況下,聲明一個 std::array 而不進行明確初始化將按照 C 11 規範預設初始化所有元素。此行為適用於零大小和非零大小的陣列。

值初始化與預設初始化:

請注意值初始化 (8.5/7)與預設初始化不同。值初始化為元素分配其各自類型的預設值,對於基本類型來說通常為零或 false。要明確執行值初始化,可以使用帶有空初始值設定項的大括號:

<code class="cpp">std::array<int, 13> cxx_style_array{}; // Value-initialize all elements to 0</code>

這明確地將所有元素設為 int 的預設值,即 0。

以上是std::array 在 C 11 中是預設初始化的嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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