本隨筆緊接上個(gè)隨筆:空結(jié)構(gòu)體(類對于C++)的大小
http://www.shnenglu.com/windcsn/archive/2011/04/13/144162.html這里試圖討論為什么C++的結(jié)構(gòu)體或類即使沒有成員也需要一個(gè)字節(jié)的大小?
首先需要一個(gè)字節(jié)的作用在上個(gè)隨筆中已經(jīng)說明,是為了在生成實(shí)例的時(shí)候確定區(qū)別;但實(shí)際上在C里面是不支持空成員的結(jié)構(gòu)體,直接報(bào)編譯錯(cuò)誤。
因此這是C++特有的特性,可能有如下的原因:
1.C++里面必須支持沒有成員的類,比如純虛類;這些類只有方法,沒有數(shù)據(jù)成員(雖然會有虛表);但這些類不會被實(shí)例化。
2.為了達(dá)到統(tǒng)一,非純虛類的C++結(jié)構(gòu)體和類也會被C++支持,但他們需要實(shí)例化,所以需要提供一個(gè)字節(jié)來可以給他們分配內(nèi)存。
而C里面是不支持沒有成員的結(jié)構(gòu)體(VC里面是編譯不過的),其實(shí)完全沒有必要支持這種無意義的定義,從而更簡單。
歡迎討論。