AFAIK,所述sizeof
不應該返回0
,但下面的程序:尺寸類的在C++空數組
#include <iostream>
class A {
public:
int a[0];
};
int main() {
A obj;
std::cout << sizeof(obj) << std::endl;
}
輸出0
。爲什麼?
AFAIK,所述sizeof
不應該返回0
,但下面的程序:尺寸類的在C++空數組
#include <iostream>
class A {
public:
int a[0];
};
int main() {
A obj;
std::cout << sizeof(obj) << std::endl;
}
輸出0
。爲什麼?
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。
你爲什麼期望它不是'0'? – BartoszKP
@BartoszKP因爲C++標準禁止它。 –
@Dukeling不,代碼無論如何都是非法的C++。的 –