2013-09-21 14 views
11

AFAIK The sizeof nie powinna powrócić 0, ale następujący program:wielkość klasie pustą tablicę C++

#include <iostream> 

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

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

wyjścia 0. Czemu?

+0

Dlaczego oczekujesz, że nie będzie to "0"? – BartoszKP

+6

@ BartoszKP Ponieważ standard C++ zabrania tego. –

+1

@Dukeling Nie, kod jest nielegalny w C++. –

Odpowiedz

13

C++ nie zezwala na tablice o zerowym rozmiarze. Zgodnej kompilator odrzuci kod, np .:

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

Więc zachowanie sizeof tutaj po prostu nie jest istotne. GCC zezwala na to (bez -pedantic) jako compiler extension.

+1

+1: Można to znaleźć w 8.3.4 §1: * "W deklaracji TD [stała ekspresja]' [..] występuje stała ekspresja (5.19), powinna być całkowitym stałym wyrażeniem a jego wartość jest większa od zera "*. – Zeta

+0

Jaki jest rozmiar obiektu tej klasy w GCC? Przypuszczam, że jest wielkości wskaźnika. co to jest? – hasan83

+0

@ Hasan Nie ma sensu rozmawiać o tym, jak wadliwa implementacja powinna powrócić w takim przypadku. Rozmiar tablicy nie powinien być równy 0 –

Powiązane problemy