編譯器提供預設建構函式的幾種情況

2021-06-07 17:18:30 字數 339 閱讀 1511

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

在網友backer的幫助下,我們參看了ansic++的iso標準,並從彙編的角度試驗了幾種主流編譯器的行為,對於編譯器提供預設建構函式的行為得出下面的結論:

如果乙個類中沒有定義任何建構函式,那麼只有以下三種情況時,編譯器才會提供預設建構函式:

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

2、如果類的基類有建構函式(可以使使用者定義的建構函式,也可以是編譯器提供的預設建構函式);

3、在類中的所有非靜態的物件的資料成員,他們所屬的類中有建構函式(可以使使用者定義的建構函式,也可以是編譯器提供的預設建構函式);

C 編譯器何時提供預設的建構函式和拷貝建構函式

2008年08月27日 星期三 10 16 總的來說,編譯器只在它需要的時候才會合成乙個預設建構函式,或者擴張所有已存在的建構函式。乙個類滿足下列其中任何乙個條件 1.包含了乙個類的物件,這個物件有乙個建構函式 包括編譯器合成的預設建構函式 2.如果繼承自一些基類,其中某些基類有乙個建構函式 包括編...

C 編譯器何時為使用者提供預設建構函式

第一種是類成員中有成員是類物件,並且該成員的類含有預設建構函式,那麼c 編譯器會幫你給這個類也生成乙個預設建構函式,用來呼叫其成員物件的建構函式,完成該成員的初始化構造。需要強調的是,如果這個成員的類也沒有給出缺省建構函式,那麼c 編譯器也不會幫你生成該類的預設建構函式。第二種情況是這個類的基類有預...

C 編譯器何時為使用者提供預設建構函式

第一種是類成員中有成員是類物件,並且該成員的類含有預設建構函式,那麼c 編譯器會幫你給這個類也生成乙個預設建構函式,用來呼叫其成員物件的建構函式,完成該成員的初始化構造。需要強調的是,如果這個成員的類也沒有給出缺省建構函式,那麼c 編譯器也不會幫你生成該類的預設建構函式。第二種情況是這個類的基類有預...