編譯器提供默認構造函數的幾種情況

在孫鑫的《VC++深入詳解》一書中,看到了這部分內容:

/////////////////////////////////////////////////////////////////////////////////////////

在網友backer的幫助下,我們參看了ANSIC++的ISO標準,並從彙編的角度試驗了幾種主流編譯器的行爲,對於編譯器提供默認構造函數的行爲得出下面的結論:

如果一個類中沒有定義任何構造函數,那麼只有以下三種情況時,編譯器纔會提供默認構造函數:

1、如果一個類中有虛擬成員函數或者虛擬繼承父類(即有虛擬基類)時;

2、如果類的基類有構造函數(可以使用戶定義的構造函數,也可以是編譯器提供的默認構造函數);

3、在類中的所有非靜態的對象的數據成員,他們所屬的類中有構造函數(可以使用戶定義的構造函數,也可以是編譯器提供的默認構造函數);

發佈了18 篇原創文章 · 獲贊 39 · 訪問量 30萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章