內建型別是否由 C 的預設建構子初始化?
在 C 中,編譯器產生的隱式預設建構子是負責初始化類別成員。但是,有一個常見的誤解,認為此行為擴展到內建類型。
預設初始化行為
隱式預設建構子不初始化內建類型的成員。當在沒有使用者定義的初始化的情況下使用此類構造函數時,內建類型的成員保持未初始化狀態。
規則的例外
而預設建構子通常不會初始化內建類型,在某些情況下可能會初始化:
Value初始化:
在C 03 及更高版本中,語法C() 呼叫類別實例的值初始化。如果類別沒有使用者宣告的建構函數,則值初始化將對內建型別成員進行零初始化。
聚合初始化:
聚合初始化語法,例如 C c = {},在不使用建構子的情況下執行初始化。這會導致內建類型成員的零初始化。
範例:
考慮以下沒有使用者宣告的建構子的類別:
class C { public: int x; };
沒有明確的初始化:
C c; // Compiler-provided default constructor used // c.x contains garbage
明確值初始化:
C c = C(); // Value-initialization used assert(c.x == 0);
初始化:
C c = {}; // Aggregate initialization assert(c.x == 0);
初始化聚合:
要注意的是,上述行為可能會因具體情況而異使用的C版本以及具體的類別定義。以上是C 的預設建構函式是否初始化內建型別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!