2013-09-21 15 views
11

AFAIK,所述sizeof不應該返回0,但下面的程序:尺寸類的在C++空數組

#include <iostream> 

class A { 
public: 
    int a[0]; 
}; 

int main() { 
    A obj; 
    std::cout << sizeof(obj) << std::endl; 
} 

輸出0。爲什麼?

+0

你爲什麼期望它不是'0'? – BartoszKP

+6

@BartoszKP因爲C++標準禁止它。 –

+1

@Dukeling不,代碼無論如何都是非法的C++。的 –

回答

13

C++不允許零大小的陣列。一個符合編譯器拒絕代碼,例如:

$ g++-4.8 -pedantic-errors main.cpp 
main.cpp:5:14: error: ISO C++ forbids zero-size array 'a' [-Wpedantic] 
     int a[0]; 
      ^

所以sizeof行爲在這裏是根本不相關。 GCC允許它(沒有-pedantic)作爲compiler extension

+1

1:這可以在8.3.4§1找到:*「在一個聲明'TD [常數表達式]'[..]的常數表達式(5.19)的存在,它 應整數表達式其值應大於零「*。 – Zeta

+0

GCC中這個類的對象的大小是多少?我想它是指針的大小。它是什麼? – hasan83

+0

@hasan在這種情況下討論錯誤的實現應該返回是沒有意義的。數組的大小不應該是0 –