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