為什麼 C 中預設建構的 Const 物件需要使用者定義的預設建構子?
C 標準在第 8.5 節中規定:對於預設初始化的 const 對象,它們的類型必須是具有使用者提供的預設建構函數的類別。了解此要求需要理解 POD(純舊資料)類別和非 POD 類別之間的差異。
POD 與非 POD 類別
POD 類別是那些沒有使用者定義的建構子、析構函式或虛擬成員函式。它們可以使用未初始化的記憶體進行初始化,從而允許高效的記憶體分配和直接的記憶體操作。
另一方面,非 POD 類別是那些違反任何 POD 限制的類別。它們必須在使用前初始化,嘗試使用未初始化的記憶體來初始化它們會導致未定義的行為。
預設建構子的要求
此標準強制執行使用者的要求-為預設建構的const 物件提供預設建構子因為:
確保物件實用性:如果POD類別沒有使用者定義的建構函數,則預設情況下它保持未初始化狀態。宣告未初始化的 POD 類別的 const 物件會使其無用,因為其值無法修改。
POD p1; // uninitialized - can be assigned later const POD p2; // uninitialized - error, cannot be modified
促進非 POD 初始化: 使用者-定義的建構子使類別成為非 POD。聲明非 POD 類別的 const 物件可以保證其初始化,無論是否提供了初始化器。
nonPOD_B b1; // initialized const nonPOD_B b2; // initialized
因此,透過要求使用者提供預設建構函式來預設 -建構 const 對象,C 標準確保即使是 POD 類別的 const 物件也能正確初始化,從而可用。
以上是為什麼 C 中預設建構的 const 物件需要使用者定義的預設建構函式?的詳細內容。更多資訊請關注PHP中文網其他相關文章!