1
2
3
4
5
6
7
8
9
10
11
#include
typedef
empty{}a;
int
main()
以上**如果採用gcc編譯結果是0;採用g++結果是1;vs2008下如果檔名字尾為.c出現編譯錯誤:c 要求乙個結構或聯合至少有乙個成員;檔名字尾為.cpp能通過編譯輸出結果是1.
ps:這裡發現乙個現象,vs下採用不同檔名字尾會呼叫不同的編譯器。這和gnu中的gcc、g++編譯器差不多,如果字尾是.c,gcc都當做c程式處理,g++當做c++程式處理。如果字尾是.cpp,gcc和g++都當做c++程式處理。 1
2
3
4
5
6
7
8
9
10
#include
using
namespace
std;
class
empty{}a;
int
main()
以上**在g++和vs下編譯執行結果都是1;
那麼空類的大小為什麼是1呢,上網查了一下,主流觀點認為類的例項化要求每個例項在記憶體中都有獨一無二的位址,所以編譯器給空類定義大小為1,這樣該類的不同例項就有了不同位址。
研究空結構體和空類絕不僅僅是為了解決其大小個問題,當然如果你認為這個問題很有意思我也沒辦法。目前除了查到空結構體和空類有佔位的作用還沒查到有別的用途。也就是在**未成型之前,保證能編譯通過的前提下,先寫出乙個**架構來,這個時候空結構,空類還有空函式能起到佔位的作用。
C 之 空類和空結構體的大小
linux localhost.localdomain 2.6.32 642.11.1.el6.i686 1 smp fri nov 18 18 48 28 utc 2016 i686 i686 i386 gnu linux includeusing namespace std struct aaa...
sizeof(空類或空結構體)
某童靴前天去理想國際某公司面試,回來在宿舍討論了這樣一道題 vc 裡,有乙個空類,沒有宣告任何成員變數或函式,請問此空類占多大位元組空間?a 0 b 1 c 4 d 8 當時考慮了32bit和64bit機器,並且指標位址是int型,32bit佔4個位元組或64bit佔8個位元組,因此選了c和d 後又...
sizeof(空類或空結構體)
某童靴前天去理想國際某公司面試,回來在宿舍討論了這樣一道題 vc 裡,有乙個空類,沒有宣告任何成員變數或函式,請問此空類占多大位元組空間?a 0 b 1 c 4 d 8 當時考慮了32bit和64bit機器,並且指標位址是int型,32bit佔4個位元組或64bit佔8個位元組,因此選了c和d 後又...