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