透過預設建構函式初始化內建型別
在C 中,預設建構函式由編譯器為執行下列運算的類隱式定義:沒有顯式宣告的建構函數。這個隱式預設建構函式會自動初始化內建型別的成員嗎?
回答
不會,隱式定義的預設建構子不會初始化內建型別的成員。但是,需要注意的是,類別實例可以透過其他方式初始化。
值初始化與預設建構子
通常假定語法為 C()呼叫預設建構子。但是,在某些情況下,它會執行值初始化。如果使用者宣告的預設建構函數不存在,就會發生這種情況。值初始化直接初始化每個類別成員,導致內建類型零初始化。
例如:
class C { public: int x; };
如果沒有定義使用者宣告的建構函數,C()會使用值初始化:
C c; // c.x contains garbage
顯式值初始化
使用() 明確值初始化,如下列程式碼所示,將對 x進行零初始化:
C c = C(); // c.x == 0 C *pc = new C(); // pc->x == 0
聚合初始化
聚合初始化也可以在不使用建構子:
C c = {}; // C++98 C d{}; // C++11 // c.x == 0, d.x == 0
因此,雖然預設構造函數不會初始化內建成員類型,但C 中存在替代初始化方法。
以上是C 的隱式預設建構函式是否初始化內建型別成員?的詳細內容。更多資訊請關注PHP中文網其他相關文章!